今天发现网站特别卡!!nginx
查看网络链接数:vim
netstat -an |wc -l服务器
netstat -an |grep xx |wc -l 查看某个/特定ip的链接数cookie
netstat -an |grep TIME_WAIT|wc -l 查看链接数等待time_wait状态链接数网络
netstat -an |grep ESTABLISHED |wc -l 查看创建稳定链接数量socket
查看不一样状态的链接数数量tcp
[root@cp-nginx ~]# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'性能
LISTEN 8网站
ESTABLISHED 2400ui
FIN_WAIT1 2
TIME_WAIT 6000
查看每一个ip跟服务器创建的链接数
[root@cp-nginx ~]# netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
31 45.116.147.178
20 45.116.147.186
12 23.234.45.34
11 103.56.195.17
(PS:正则解析:显示第5列,-F : 以:分割,显示列,sort 排序,uniq -c统计排序过程当中的重复行,sort -rn 按纯数字进行逆序排序)
查看每一个ip创建的ESTABLISHED/TIME_OUT状态的链接数
[root@cp-nginx ~]# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
24 103.56.195.17
19 45.116.147.186
18 103.56.195.18
17 45.116.147.178
解决time_wait链接数大量问题
查询到time_wait链接数过多状况下,调整内核参数:/etc/sysctl.conf
vim /etc/sysctl.conf
添加如下配置文件:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 300
/sbin/sysctl -p 让参数生效,调优完成
参数详解:
1.net.ipv4.tcp_syncookies = 1 表示开启 syn cookies 。当出现 syn 等待队列溢出时,启用 cookies 来处理,可防范少许 syn ***,默认为 0 ,表示关闭;
2.net.ipv4.tcp_tw_reuse = 1 表示开启重用。容许将 time-wait sockets 从新用于新的 tcp 链接,默认为 0 ,表示关闭;
3.net.ipv4.tcp_tw_recycle = 1 表示开启 tcp 链接中 time-wait sockets 的快速回收,默认为 0 ,表示关闭。
4.net.ipv4.tcp_fin_timeout 修改系靳默认的 timeout 时间
通过上面的设置后,发现网站time_wait链接数慢慢减小,网站速度也快多了!
若是以上配置调优后性能还不理想,可继续修改一下配置:
vi /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改成20分钟。 net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外链接的端口范围。缺省状况下很小:32768到61000,改成1024到65000。 net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,能够容纳更多等待链接的网络链接数。 net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量,若是超过这个数字,TIME_WAIT套接字将马上被清除并打印警告信息。 默认为180000,改成5000。 对于Apache、Nginx等服务器,上几行的参数能够很好地减小TIME_WAIT套接字数量,可是对于 Squid,效果却不大。此项参数能够控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。