TIME_WAIT導致系統越來越慢

同事說系統越來越慢,出現一堆TIME_WAIT,是以前的幾十倍,是否跟這個有關係。

wKioL1OnxpGTOCsfAABxelWw8z0399.jpg


上去看看什麼情況。

[xxx@xxx ~]$ netstat -ntal    #一堆TIME_WAIT沒釋放,幾乎由程序本身發起。
tcp        0      0 ::ffff:127.0.0.1:60110      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60303      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60329      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60088      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60044      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60359      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60132      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60306      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60061      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60101      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60083      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60243      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60035      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60080      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60198      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60151      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60003      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60070      ::ffff:127.0.0.1:28080      TIME_WAIT   
tcp        0      0 ::ffff:127.0.0.1:60189      ::ffff:127.0.0.1:28080      TIME_WAIT

[xxx@xxx ~]$ netstat -ntal |awk '{print $6}'|sort |uniq -c |sort -nr
    10558 TIME_WAIT          #這個數量多的不太正常。
       23 ESTABLISHED        #這裏連接數少是做了緩存,命中率達98%以上,很少穿透進來。
       
[xxx@xxx ~]$ cat /etc/issue  #操作系統版本不一樣,內核參數也有些變化。
CentOS release 6.3 (Final)
Kernel \r on an \m


/etc/sysctl.conf 配置文件末尾添加如下3個參數,然後執行 /sbin/sysctl -p 讓參數生效。

 

net.ipv4.tcp_tw_reuse = 1     #允許TIME-WAIT sockets重新用於新的TCP連接,默認爲0。

net.ipv4.tcp_tw_recycle = 1   #開啓TCP連接中TIME-WAIT sockets的快速回收,默認爲0。

net.ipv4.tcp_fin_timeout = 20 #修改默認的 TIMEOUT 時間。


接着看下TIME_WAIT數量,恢復正常。

[xxx@xxx ~]$ netstat -ntal |awk '{print $6}'|sort |uniq -c |sort -nr
     54 TIME_WAIT
     25 ESTABLISHED


現在訪問系統變得非常快。


現將這3個參數加入系統初始化腳本,但以後程序出現這種情況不易被發現,如何監控值得考慮。

能不動內核參數,最好別動,很多情況下默認已夠用,切忌爲了優化而優化。目前這只是暫時解決問題,治標不治本。


最後還需聯繫開發一起排查問題原因~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章