天天看點

netstat監控大量ESTABLISHED連接配接數和TIME_WAIT連接配接數題解決

檢視網絡連接配接數:

netstat -an |wc -l

netstat -an |grep xx |wc -l        檢視某個/特定ip的連接配接數

netstat -an |grep TIME_WAIT|wc -l    檢視連接配接數等待time_wait狀态連接配接數

netstat -an |grep ESTABLISHED |wc -l    檢視建立穩定連接配接數量

檢視不同狀态的連接配接數數量

[root@cp-nginx ~]# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

LISTEN 8

ESTABLISHED 2400

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

問題1:解決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 時間

如果以上配置調優後性能還不理想,可繼續修改一下配置:

vi /etc/sysctl.conf

問題2:ESTABLISHED連接配接數過大問題

怎麼解決請求結束後依然存在大量ESTABLISHED沒有被釋放

初步推斷是tomcat伺服器回收session時出了問題,這個一般都跟伺服器的Timeout設定有聯系。

檢視tomcat的配置檔案 server.xml

檢查配置得出20000毫秒的時候acceptCount=”100” ,明顯不合理,最大連接配接數也太小了吧。

是以進一步優化:

優化完畢,繼續壓測...

系統響應能力節節攀升,之前LoadRunner報錯問題直到壓倒***并發也再也沒有出現。

繼續閱讀