nginx 并发优化

因为业务当中碰到过业务并发的时候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数据不准的情况

原因有以下几点:

  • 单机压测

总结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《老男孩Linux运维》笔记 隐藏Nginx软件版本号 一般来说,软件的漏洞都和版本有关。因此要尽量隐藏对访问用户...
    Zhang21阅读 9,131评论 0 28
  • nginx优化 突破十万并发 一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: worker_pr...
    SkTj阅读 4,524评论 0 4
  • nginx的安装与基本配置文档网上已经有很多了,但具体讲优化的文章还比较少,偶尔发现有这么一篇《nginx优化 突...
    yichen_china阅读 12,945评论 0 65
  • (1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2**如果不了解cpu的核数,可以top命令之后...
    小慕先森阅读 6,298评论 0 0
  • 我已经谈过一些关于Nginx的常见问题; 其中有一些是关于如何优化Nginx. 很多Nginx新用户是从Apach...
    daniel_hao阅读 7,389评论 0 10

友情链接更多精彩内容