nginx optimize [相关简单的nginx长连接测试配置以及调优]
This project is maintained by wangfakang
nginx相关优化与高并发测试:
前两天被问到的一个问题,下面就简单的整理下,注:nginx的相关配置优化只是部分可以自己扩充:
首先需要和server端保持百万级的长连接,那么就需要有百万的client,那么现在的问题就是client这么多[资源有限], 该如何做恩?
方案二:
可以使用docker,docker默认启动的时候使用的网络模式就是bridge,其docker产生的各个容器之间的网络资源是
隔离,属于自己的命名空间内部,所以可以启动16个docker就完美解决了.
fakang@fakang-pc:~/wangfakang$sysctl -a | grep "net.ipv4.ip_local_port_range"
net.ipv4.ip_local_port_range = 32768 61000
所以要进行重新设置.
2.client需要打开很多的文件描述符,所以应该设置当前系统能打开最大文件描述个数.
通过:fakang@fakang-pc:~/wangfakang/ctest$ ulimit -n
1024
默认是只运行打开1024个文件描述符.
方法1:ulimit Cn 1000000 //重启设置失效
方法2:在/etc/security/limits.conf 最后增加:
soft nofile 1000000 //硬设置
hard nofile 1000000 //软设置
nginx做高并发的时候可以从以下几方面做优化:
1.tcp层面上的参数设置:
通常tcp相关的设置文件位于: /etc/sysctl.conf
```
net.ipv4.tcp_timestamps = 0 //此参数和tcp_tw_recycle参数同时打开会激活这种现象[可以缓存每个连接最新的时间戳,
后续请求中如果时间戳小于缓存的时间戳,即视为无效,相应的数据包会被丢弃。]此种现象会大致在使用LVS(NAT模式下)的时候会造成
client明明发送了SYN包但是就收不到server端的ACK,被丢弃了. 一般会造成nginx出现504错误.
net.ipv4.tcp_synack_retries = 1 //ack包重试次数
net.ipv4.tcp_syn_retries = 1 //syn包重试次数
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1 //运行socket fd处于time_wait进行使用.
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1 //TCP保持在FIN_WAIT_2状态的时间.
net.ipv4.tcp_keepalive_time = 30 //尝试验证空闲连接是否完好的频率.
net.ipv4.ip_local_port_range = 1024 65000 //根据需求设置本地允许打开使用的port范围.
```
最后设置好了,可以通过: /sbin/sysctl -p 命令进行生效.
2.nginx相关配置参数设置:
最好使用epoll.
worker 当前nginx启动的worker个数.
worker_connections 每个worker处理的最大连接数.
upstream中可以设置: keepalive_timeout keepalive参数.
等等
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流