一次压力测试,nginx服务器老是报告TIME_WAIT 告警, 检查nginx配置和系统网络配置发现现有的配置并发能力弱,无法满足现有的并发请求的需求。
原始配置:
worker_processes 2;
events {
worker_connections 2500;
}
改进方式:
使用epoll模式,增加并发连接数,增加nginx系统并发连接能力。
后端使用长连接, 提高端口利用率,减少TIME_WAIT状态比例, 使系统可以允许更多的TIME_WAIT。
优化tcp连接工作模式,减少FIN2_WAIT状态比例 (对应监控中的OTHERSTATE)。
worker_processes 4;
events {
use epoll; #支持大量连接和非活动连接
worker_connections 5000;
multi_accept on; #nginx在已经得到一个新连接的通知时,接收尽可能多的连接
}
优化Linux系统关于TCPIP的连接的配置 vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1 表示开启syn cookies,当出现SYN等待队列一出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1 表示开启重启重用,允许将time_wait scokets 重新用于新的连接,默认是0,表示关闭
net.ipv4.tcp_tw_reuse = 1 表示开启TCP连接中TIME WAIT sockets 快速回收,默认为0表示关闭
net.ipv4.tcp_fin_timeout = 1 修改默认的timeout时间
net.ipv4.tcp_max_syn_backlog = 4096 #表示SYN队列的长度,默认为1024,加大队列长度为4096,可以容纳更多等待连接的网络连接数。
最后执行/sbin/sysctl -p