我有一個Rails 2.3應用程序,它保持打開太多的MySQL連接。不到一天(〜400rpm)後,一個進程與我們使用的兩臺mysql服務器有83個ESTABLISHED連接。Rails MySQL太多連接
我們使用的是mysql2 gem(0.2.18),而mysql客戶端是:mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1
。
如何解決這些泄漏發生的位置?在我們的測試中,我們永遠無法泄漏連接,只有在生產中。
在MySQL中,我們可以運行show processlist;
來查看打開的連接。在應用程序服務器上,我們可以使用sudo netstat -ntp | grep 3306 | grep ESTABLISHED | awk '{print $7}' | sort | uniq -c | sort -n
來計算每個pid的連接數。
83怎麼了?你恐慌的方式就像是8300. – tadman
有84個Rails應用程序,我們的mysql服務器最多有2000個連接。所以如果所有的Rails應用程序都有超過23個連接,我們就用完了。我們目前的解決方案是每5小時重新啓動一次rails應用程序實例。 –
我們通過在我們的database.yml配置文件中加入「wait_timeout:300」來解決這個問題。 5分鐘後關閉未使用的mysql連接。 –