Can’t connect to MySQL server有關linux tcp鏈接優化

最近有2臺web機器連接mysql有時會出現Can’t connect to MySQL server的狀況,查看exception日誌: mysql

以下: web

[message:protected] => SQLSTATE[HY000] [2003] Can’t connect to MySQL server on ‘192.168.1.248′(99)
1):問題描述:
sql

2臺web機器,只有其中一臺出現該exception,另一臺無此問題; 緩存

exception logs: Can’t connect to MySQL server on ‘*.*.*.*’ (99) cookie

2):問題排查: 網絡

一、查看mysql的variables,status: socket

max_connect_errors = 50000
max_connections = 1000

max_user_connections = 200 tcp

max_connect_errors = 50000 spa

max_connections = 1000 日誌

max_user_connections = 200

二、ulimit -a:

三、查看netstat -anp

查看問題機器的netstat -anp,發現大部分都是TIME_WAIT,懷疑是tcp的問題;

將近有3萬的網絡套接字,此時CPU也耗盡,致使這麼多的TCP/IP鏈接CPU處理不過來,而使部分TCP/IP鏈接超時或處理失敗

三、OS:

more /etc/sysctl.conf:

net.ipv4.tcp_syncookies = 1

新的鏈接能夠從新使用TIME-WAIT套接字

net.ipv4.tcp_tw_reuse=1

啓動TIME-WAIT套接字狀態的快速循環功能

net.ipv4.tcp_tw_recycle=1

套接字關閉時,保持FIN-WAIT-2狀態的時間

net.ipv4.tcp_fin_timeout=30

對於全部協議的隊列,設置最大系統發送緩存(wmen)和接收緩存(rmem)到8M

net.core.wmem_max=8388608

net.core.rmem_max=8388608

讓參數生效。

3):問題緣由:

報錯」Can’t connect to MySQL server on ‘*.*.*.*’ (99) 」 參考MySQL Client端錯誤代碼說明:錯誤代碼爲99,99的含義:$perror 99 OS error code  99:  Cannot assign requested address 這是一個本地OS的拋錯,表示沒法分配本地地址資源(應該是端口),socket沒法建立

」 Cannot assign requested address」,多半是因爲客戶端請求過於頻繁,而Server端練級關閉後本地暫時處於TIME_WAIT,因此暫時端口都不可用致使。所以修改下OS參數就ok了

相關文章
相關標籤/搜索