我有一个 Rails 2.3 应用程序保持打开太多 MySQL 连接。不到一天(大约 400rpm)后,一个进程与我们使用的两台 mysql 服务器建立了 83 个 ESTABLISHED 连接。
我们使用的是 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;
查看打开的连接。在应用服务器上,我们可以计算每个 pid 的连接数sudo netstat -ntp | grep 3306 | grep ESTABLISHED | awk '{print $7}' | sort | uniq -c | sort -n
。