windows篇mysql
1.查看一下佔用狀況.在cmd輸入命令sql
netstat -ano | findstr "3306"
發現 Mysql 的 3306 端口存在大量 TIME_WAIT
狀態鏈接,考慮到近期考勤人數的忽然增多,且指紋機打卡爲實時上傳等緣由,初步猜想是在短期內指紋機大量請求接口操做數據庫,而端口並未釋放所致使。數據庫
修改Mysql配置windows
[mysqld] # 服務器關閉交互式鏈接前等待活動的秒數 interactive_timeout=30 # 服務器關閉非交互鏈接以前等待活動的秒數 wait_timeout=30
注意:須要同時配置interactive_timeout與wait_timeout纔可生效!
服務器
修改Windows服務器TCP鏈接配置cookie
因爲Windows下默認Socket鏈接爲5000個,且預設TIME_WAIT時間爲4分鐘。咱們同時須要修改服務器配置。socket
打開註冊表 regedit
找到路徑 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在該路徑下修改或新建註冊表
類型: DWORD值
名稱:MaxUserPort
值(十進制):65543
類型: DWORD值
名稱:TcpTimedWaitDelay
值(十進制):30
tcp
保存後重啓Windows服務器,發現3306的 TIME_WAIT
端口數量正常,項目恢復正常使用。網站
Linux篇spa
用命令進行查詢,
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
反饋結果爲:
TIME_WAIT 236
ESTABLISHED 13
LISTEN 11
顯然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 net.ipv4.tcp_timestamps
而後執行/sbin/sysctl -p讓參數生效。
修改以後能夠命令查看修改後的值
cat /proc/sys/net/ipv4/tcp_syncookies cat /proc/sys/net/ipv4/tcp_tw_reuse cat /proc/sys/net/ipv4/tcp_tw_recycle cat /proc/sys/net/ipv4/tcp_timestamps
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時間
一、開啓tcp_timestamp是開啓tcp_tw_recycle,tcp_tw_reuse和tcp_timestamp的前提條件。
二、可是在nat模式下,不用將tcp_tw_recycle和tcp_timestamp同時開啓,這會形成tcp超時引起故障。
修改以後,再用命令查看TIME_WAIT鏈接數
netstat -ae|grep "TIME_WAIT" |wc -l netstat -ae |grep mysql
發現大量的TIME_WAIT 已不存在,mysql進程的佔用率很快就降下來的,網站訪問正常。 不過不少時候,出現大量的TIME_WAIT狀態的鏈接,每每是由於網站程序代碼中沒有使用mysql.colse(),才致使大量的mysql TIME_WAIT。