mysql 端口time_wait_linux上大量tcp端口处于TIME_WAIT的问题
最近發(fā)現(xiàn)在連接監(jiān)控數(shù)據(jù)庫的時候偶爾會連不上,報錯:
Couldn't connect to host:3306/tcp: IO::Socket::INET: connect: Cannot assign requested address
查看了一下發(fā)現(xiàn)系統(tǒng)中存在大量處于TIME_WAIT狀態(tài)的tcp端口
$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 50013
ESTABLISHED 27
SYN_RECV 1
由于要監(jiān)控的主機太多,監(jiān)控的agent可能在短時間內創(chuàng)建大量連接到監(jiān)控數(shù)據(jù)庫(MySQL)并釋放造成的。在網(wǎng)上查閱了一些tcp參數(shù)的相關資料,最后通過修改了幾個系統(tǒng)內核的tcp參數(shù)緩解了該問題:
#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,表示關閉。
修改完成并生效后,系統(tǒng)中處于TIME_WAIT狀態(tài)的tcp端口數(shù)量迅速下降到100左右:
$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 82
ESTABLISHED 36
總結
以上是生活随笔為你收集整理的mysql 端口time_wait_linux上大量tcp端口处于TIME_WAIT的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue --- v-html、v-bi
- 下一篇: java常见面试考点(九):SSM面试题