雲伺服器資料庫出現大量TIME_WAIT解決辦法
發現大量的TIME_WAIT解決辦法
網站都打不開,登陸資料庫伺服器(windows),發現很卡,於是重啟了?伺服器,進入系統後,沒過一會問題依舊,檢視了下系統程式,發現mysql佔用率達到99%,可以肯定的是mysql連線出現問題:
netstat -an
192.168.12.13:3306 192.168.12.12:30443 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30444 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30445 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30446 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30447 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30448 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30449 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30450 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30451 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30452 TIME_WAIT
... ...
根據TCP協議定義的3次握手斷開連線規定,發起socket主動關閉的一方 socket將進入TIME_WAIT狀態,TIME_WAIT狀態將持續2個MSL(Max Segment Lifetime),在Windows下預設為4分鐘,即240秒,TIME_WAIT狀態下的socket不能被回收使用. 具體現象是對於一個處理大量短連線的伺服器,如果是由伺服器主動關閉客戶端的連線,將導致伺服器端存在大量的處於TIME_WAIT狀態的socket, 甚至比處於Established狀態下的socket多的多,嚴重影響伺服器的處理能力,甚至耗盡可用?socket,停止服務. TIME_WAIT是TCP協議用以保證被重新分配的socket不會受到之前殘留的延遲重發報文影響的機制,是必要的邏輯保證.
在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters,新增名為TcpTimedWaitDelay的
DWORD鍵,設定為60,以縮短TIME_WAIT的等待時間
登陸到web伺服器(linux):
netstat -ae |grep mysql
tcp 0 0 aaaa:53045 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53044 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53051 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53050 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53049 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53048 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53055 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53054 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53053 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53052 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53059 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53058 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53057 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53056 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53063 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53062 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53061 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53060 192.168.12.3:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53067 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53066 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53065 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53064 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa53071 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53070 192.168.12.13:mysql TIME_WAIT root 0
tcp 0 0 aaaa:53069 192.168.12.13:mysql TIME_WAIT root 0
發現系統存在大量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_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 修改系統預設的 TIMEOUT 時間
修改之後,再用
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程式的佔用率很快就降下來的,各網站訪問正常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957453/viewspace-2769734/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- MYSQL資料庫匯入資料時出現亂碼的解決辦法MySql資料庫
- 伺服器iis出現假死解決辦法伺服器
- PbootCMS資料庫配置,修改為Mysql資料庫,配置Mysql出錯解決辦法boot資料庫MySql
- stm出現Flash Timeout解決辦法
- 資料庫 Table is marked as crashed and should be repaired 解決辦法資料庫AI
- SQLServer資料庫恢復掛起的解決辦法SQLServer資料庫
- Linux 出現 su: Authentication failure 解決辦法LinuxAI
- git出現Permission denied的解決辦法Git
- 資料傾斜解決辦法
- 資料庫無法註冊至監聽服務解決辦法資料庫
- 網路安全:網站伺服器建立資料庫連線時出錯的解決辦法…[通俗易懂]網站伺服器資料庫
- 【python】pip安裝庫時出現Read timed out.解決辦法Python
- Navicat還原資料庫不完整的解決辦法資料庫
- SQLServer附加資料庫是隻讀模式的解決辦法SQLServer資料庫模式
- Android Studio 出現“Cannot resolve symbol” 解決辦法AndroidSymbol
- LoadRunner中文出現亂碼的解決辦法
- Mysql出現連線錯誤解決辦法MySql
- discuz資料庫搬家,改密碼後無法訪問解決辦法資料庫密碼
- 雲伺服器寶塔強制解除安裝資料庫的辦法伺服器資料庫
- 華納雲:資料庫出現ORA-00604報錯怎麼解決資料庫
- 資料庫欄位為0000-00-00的解決辦法資料庫
- SQL SERVER 資料庫被標記為“可疑”的解決辦法SQLServer資料庫
- MYSQL++ 資料庫連線超時的解決辦法LTMySql資料庫
- 伺服器出現500錯誤的原因和解決辦法伺服器
- 雲資料庫安全解決方案資料庫
- 雲伺服器mysql 服務不見了的解決辦法伺服器MySql
- mongodb清理collection中大量資料的2種辦法MongoDB
- 安裝CentOS7出現dracut:/#……time解決辦法CentOS
- git add .出現錯誤LF will be replaced by CRLF in 解決辦法Git
- Docker容器掛載資料卷出現Permission denied許可權問題的解決辦法Docker
- SQLServer資料庫處於恢復掛起狀態的解決辦法SQLServer資料庫
- 雲伺服器解決“MySQL忘記密碼”問題的辦法伺服器MySql密碼
- laravel實現100w大量資料插入資料庫Laravel資料庫
- (資料庫十)資料庫中的鎖機制以及死鎖產生的原因及解決辦法資料庫
- git rebase後出現(master|REBASE 1/10)的解決辦法GitAST
- 出現可怕的NoSuchMethodError錯誤的解決辦法 -Gunnar MorlingError
- IMG圖片下面出現下邊距的解決辦法