美文网首页
nginx 并发优化

nginx 并发优化

作者: __XY__ | 来源:发表于2019-04-10 11:57 被阅读0次

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

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

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

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

    可见报错主要为两种:

    • 文件描述符不够用。
    • worker connection 不够用。

    原因如下:

    先把一些报错处理完后,去分析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数据不准的情况

    原因有以下几点:

    • 单机压测

    总结

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

    相关文章

      网友评论

          本文标题:nginx 并发优化

          本文链接:https://www.haomeiwen.com/subject/jvxniqtx.html