今天發現網站特別卡!!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套接字拖死。