tcp_tw_reuse 與 net.ipv4.tcp_tw_recycle


 

 

最近發現幾個監控用的腳本在連接監控數據庫的時候偶爾會連不上,報錯:
 Couldn't connect to host:3306/tcp: IO::Socket::INET: connect: Cannot assign requested address
查看了一下發現系統中存在大量處於TIME_WAIT狀態的tcp端口
$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 50013
ESTABLISHED 27
SYN_RECV 1
由於要監控的主機太多,監控的agent可能在短時間內創建大量連接到監控數據庫(MySQL)並釋放造成的。在網上查閱了一些tcp參數的相關資料,最后通過修改了幾個系統內核的tcp參數緩解了該問題:
#vi /etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

#sysctl -p
其中:
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
修改完成並生效后,系統中處於TIME_WAIT狀態的tcp端口數量迅速下降到100左右:
$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 82
ESTABLISHED 36
簡單記錄於此,備忘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM