如果线程不自然地死亡会怎么样?

时间:2014-04-23 20:27:46

标签: mysql ruby-on-rails connection passenger pool

我们有8名乘客,每人有20个连接。应该是160最大连接。今天我们的Mysql连接超过300,我们的服务器停止响应。

如果线程不自然地死亡会怎么样?如何清理与之关联的数据库连接?

如何调试此类场景?

1 个答案:

答案 0 :(得分:1)

如果线程不自然地死亡会怎么样?

如果您在事务下使用您的语句,那么未成功事务下的所有语句都将被回滚,但如果您单独执行语句,那么已执行的语句将保存在db中,但其他未成功的语句将不会和数据可以是一致的。

如何清理与之关联的数据库连接?

根据我的假设,您的应用程序正在打开超过要求的连接,也没有正确关闭。在这种情况下,如果您在mysql admininstrator中检查连接,那么您将在睡眠模式下获得如此多的连接。所以你可以杀死所有的睡眠连接来清理它们。

如何调试此类场景?

步骤1:在服务器上启用常规日志:

Step2:在sqlyog等任何gui工具中执行以下命令。

show full processlist;

步骤3:从上面的命令进行第一次睡眠过程:

步骤3:在常规日志中查找/ grep以上进程ID(假设为235798)。您可以使用以下命令。

$ cat /var/log/mysqldquery.log | grep 235798 

注意:您的常规日志文件可以有不同的文件名和路径。

上面的命令会显示几行,检查你是否在结束时关闭连接,应该在行尾显示“完整”语句。通过这种方式,您需要检查处于睡眠模式的几个进程,并且您可以调整哪个类型语句/从哪个模块打开额外连接而不关闭,因此您可以采取措施。