處理大量TIME WAIT的情況

2021-09-20 17:23:14 字數 2811 閱讀 4897

** 

登陸伺服器的時候輸入

netstat -an|grep mysql

netstat -an|awk '/tcp/ '|sort|uniq -c 

發現存在大量time_wait狀態的連線:tcp        0      0 127.0.0.1:3306              127.0.0.1:41378             time_wait

tcp        0      0 127.0.0.1:3306              127.0.0.1:41379             time_waittcp        0      0 127.0.0.1:3306              127.0.0.1:39352             time_waittcp        0      0 127.0.0.1:3306              127.0.0.1:39350             time_wait

tcp        0      0 127.0.0.1:3306              127.0.0.1:35763             time_wait

tcp        0      0 127.0.0.1:3306              127.0.0.1:39372             time_wait

tcp        0      0 127.0.0.1:3306              127.0.0.1:39373             time_wait

tcp        0      0 127.0.0.1:3306              127.0.0.1:41176             time_wait

vi /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 = 30

然後執行/sbin/sysctl -p讓引數生效。

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_max_tw_buckets = 5000

說明:net.ipv4.tcp_syncookies = 1 表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉;

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 = 30 表示如果套接字由本端要求關閉,這個引數決定了它保持在fin-wait-2狀態的時間。

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套接字拖死。

修改之後,再用

netstat -ae|grep mysql

tcp        0      0 aaaa:50408               192.168.12.13:mysql           established nobody     3224651

tcp        0      0 aaaa:50417               192.168.12.13:mysql           established nobody     3224673

tcp        0      0 aaaa:50419               192.168.12.13:mysql           established nobody     3224675

發現大量的time_wait 已不存在,mysql程序的佔用率很快就降下來的,各**訪問正常!!

以上只是暫時的解決方法,最後仔細巡查發現是前天新上線的乙個系統,程式**中沒有使用mysql.colse(),才導致大量的mysql  time_wait 

linux 下大量TIME WAIT 的處理

原文 linux 下大量time wait 的處理 linux下高併發的squid伺服器,tcp time wait套接字數量經常達到兩 三萬,伺服器很容易被拖死。通過修改linux核心引數,可以減少伺服器的ime wait套接字數量。vim etc sysctl.conf 增加以下幾行 net.i...

tomcat大量time wait問題

在服務端訪問量大的時候檢測到大量的time wait,並且介面請求延時較高。執行 netstat n awk tcp end 這個shell命令的意思是把netstat n 後結果的最後一條放到s陣列中,如果相同則執行 1操作。此時能看到tcp各種狀態下的連線數量,示例 服務端架構是採用nginx ...

linux下解決大量的TIME WAIT

root web02 vi etc sysctl.conf 新增如下內容 net.ipv4.tcp tw reuse 1 net.ipv4.tcp tw recycle 1 net.ipv4.tcp syncookies 1 使核心引數生效 root web02 sysctl p readme ne...