nginx 并发优化

2019-04-10  本文已影响0人  __XY__

因为业务当中碰到过业务并发的时候nginx直接挂掉的情况。
所以专门把nginx并发优化的相关文章梳理了一遍。并实践如下。

一: 先解决nginx高并发的一些服务器报错

通过nginx的error日志去拿到报错:

vim /var/log/nginx/xxxx_error.log.3.gz
error.log

可见报错主要为两种:

原因如下:

先把一些报错处理完后,去分析nginx的瓶颈在哪里。

1 确认cpu是不是瓶颈(top)
2 确认内存是不是瓶颈(free)
3 确认网络连接数是不是瓶颈
关于网络链接这块,需要用到netstat命令:
先通过netstat -ant |grep -w 80 查看各个nginx的tcp连接在并发情况下的状态
明显发现是因为ESTABLISHED 状态的数目过少,一直都没有超过1300。
同时ab命令下的吞吐量指标一直提不上去,一直在5000左右徘徊。
瓶颈发现了,那就靠这个指标去解决瓶颈。

watch -n 0.1 -d " netstat -ant |grep -w  80|grep 'ESTABLISHED'|wc -l"

含义为同时在连接状态的tcp连接数。

因为涉及到tcp参加优化,从内核优化着手。

参考这篇文章:
基于Nginx实现10万+并发,你应该做的Linux内核优化

用ab命令去验证

ab -r -n 100000 -c 10000    http://your.ip/

其他

ab测试并发的原理

可以看一下ab.c的源代码:
http://svn.apache.org/repos/asf/httpd/httpd/trunk/support/ab.c
重点是static void test(void)函数的实现
ab在执行时会先“同时”建立-c条TCP连接,(如果带-k参数) 然后一直用这-c条连接一直发送请求,在响应时间大于等于-t的超时时间或者所有的-n条请求数已经被发送完毕时,停止发送。
可以验证如下:
client执行ab -r -k -n 100000 -c 1000 http://54.199.226.173/
server 执行watch -n 0.1 -d " netstat -ant |grep -w 80|grep 'ESTABLISHED'|wc -l"
会发现ESTABLISHED状态的连接数永远都是1000条。

有时碰到ab数据不准的情况

原因有以下几点:

总结

总体思路都比较简单,先排错,再优化
优化过程中一定要有一个指标作为参考。
不要单机压测,单机压测的数据都不准。
本文测试中因为涉及到网络带宽的原因,所以关于数据传输速率相关的数据都不可靠。
最好的情况是内网测内网。

上一篇 下一篇

猜你喜欢

热点阅读