查看 mysql 连接数量以及相关配置
mysql client 执行,查看连接数量和详情
SHOW PROCESSLIST;
mysql client 执行,查看相关超时时间的限制,在无配置情况下,一般为 28800(8 小时)
SHOW global variables like 'wait_timeout';
最终发现,来源于 Rails 的 sleep connection 存在部分超过系统设定超时时间
Rails Mysql2 Adapter
Rails connect 属于非交互式的连接,超时时间根据 wait_timeout 来决定
Rails Mysql2 默认在连接 mysql 的时候 session wait_timeout 为 24 天,所以即使在 mysql 设置全局 wait_timeout 也对 Rails connection 无效,仅有在更改 Rails adapter session wait_timeout 的时候,可以解决 Rails mysql 存在大量 sleep connection 的问题。
Mysql Command
也可以使用 mysql command 直接 kill 大于 8 小时的 sleep connection
mysql -uroot -pxxxxx -e "SHOW PROCESSLIST;"|grep Sleep|awk '{if($6 > 28800) print $1}'|xargs -i mysql -uroot -pxxxxx -e "KILL {};"