nginx并发数疑问
Posted 运维行闻录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx并发数疑问相关的知识,希望对你有一定的参考价值。
前段时间单台nginx的并发连接数量达到了5w多,那时候就比较惶恐,因为对65535这个数字有着陌生的敬畏,于是测试了一下到底当前配置下的nginx并发以及在性能足够的情况下,nginx并发连接数与什么有关
测试环境:
环境 | 详细 |
---|---|
压测软件 | wrk |
压测机 | 12C24G 机器若干 |
压测对象 | 16C32G Nginx Server机器一台 |
测试方法:
使用wrk创建并发连接去获取该nginx提供的一个静态图片,观察最高并发连接数
测试过程:
初始配置如下:
nginx进程由用户root启动,worker进程为nobody
系统参数配置:
cat /proc/sys/fs/file-max
2000000
tail -4/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
nginx参数配置:
第一阶段:
使用一台压测机执行如下命令:
./wrk -c 120000 -t 12 -d 60 https://172.16.0.1/images/china-map.png
此时nginx server并发如下:
并没有达到预期的120k连接,原因在于发压机器端口耗尽,无法创建更多连接,于是新增一台发压机,每台机器执行语句修改为
./wrk -c 60000 -t 12 -d 60 https://172.16.0.1/images/china-map.png
效果如下:
可以看到,对于上述配置的nginx来说,单台处理120k的连接没有任何异常,远远超出当时担心的65k连接数的问题(但是实际场景中nginx作为反向代理这个并发还是要打折)。
虽然当时理论nginx支持的并发连接数为16*10240,但是因为nobody用户的可打开连接数受限,只有65535。
那么问题来了,为什么nobody的nofile限制对nginx不起作用?nginx并发数不受用户可打开文件数限制吗?那到底并发瓶颈在哪里?
第二阶段:
继续用两台压测机对nginx发出请求,统计nobody用户打开的文件数量
lsof -u nobody|wc -l
lsof -c nginx|wc -l
统计结果显示nobody打开的文件数量在11w9左右,突破了该用户本身的限制65535
此时查看/proc/${nginx_worker_pid}/limits 显示该进程的限制为65535,由于Nginx Server配置中root与其他用户的nofile限制都是65535
为了搞清楚这个65535到底是root的还是nobody的,也为了方便实验,我们将nofile限制如下:
重新登陆生效后,重启nginx
此时看到/proc/${nginx_worker_pid}/limits显示为1024
重新压测得到并发如下
恰好为16k,那么应该是
nginx并发数量在打开文件数这里的限制大小=用户的ulimit * nginx worker进程数
那么除此之外nginx并发数量在服务器cpu内存资源足够的情况下还受哪些参数影响呢?
第三阶段:
nginx 还有两个参数
worker_connections number;
worker_rlimit_nofile number;
worker_rlimit_nofile number;
Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.
该参数作用与上述实验原理相同,也是通过限制可打开文件数量来实现
worker_connections number;
Sets the maximum number of simultaneous connections that can be opened by a worker process.
设置单个进程可同时打开的连接数,我们将它改成1024,再进行压力测试,结果如下
可以看见,有很多连接状态会处于writing状态
结论:
nginx并发连接限制影响主要有两个方面:
worker_connections * worker_processes number
worker_rlimit_nofile或者master进程ulimit -n * worker_processes number
具体nginx为何突破系统用户打开文件数限制或者说普通用户下的nginx还是这样吗还有待进一步明确。
以上是关于nginx并发数疑问的主要内容,如果未能解决你的问题,请参考以下文章