避免 TIME_WAIT 連接
當我使用 netstat 命令時,它顯示..
tcp 0 0 localhost:18056 localhost:mysql TIME_WAIT
tcp 0 0 localhost:16683 localhost:mysql TIME_WAIT
tcp 0 0 localhost:16701 localhost:mysql TIME_WAIT
tcp 0 0 localhost:16888 localhost:mysql TIME_WAIT
tcp 0 0 localhost:16832 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17725 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17682 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17414 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17606 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17737 localhost:mysql TIME_WAIT
tcp 0 0 localhost:16632 localhost:mysql TIME_WAIT
tcp 0 0 localhost:16825 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17807 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17715 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17304 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17217 localhost:mysql TIME_WAIT
tcp 0 0 localhost:18098 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17624 localhost:mysql TIME_WAIT
tcp 0 0 localhost:17734 localhost:mysql TIME_WAIT
Time_wait 連接在 2000 左右。
為了避免這種情況,我將 net.ipv4.tcp_fin_timeout=30 添加到 /etc/sysctl.conf
但是我還是有一些問題,如何避免呢?
TIME_WAIT 的存在是有原因的,原因是 TCP 數據包可能會延遲並無序到達。當他們應該成功時,弄亂它會導致額外的斷開連接。這裡有一個很好的解釋。
您的問題是您沒有在應用程序中重用 MySQL 連接,而是在每次要執行 SQL 查詢時創建一個新連接。這不僅涉及建立 TCP 連接,還涉及通過它傳遞身份驗證憑據。每個查詢(或至少每個前端 Web 請求)都會發生這種情況,這既浪費又耗時。
如果您不知道如何以您使用的任何語言啟用持久 MySQL 連接池,那麼 StackOverflow 將是一個很好的提問場所。