我想我有一些应用程序问题正在减慢我们整个应用程序的速度,并且可能会导致损坏和其他问题。
应用程序问题是由许多处于休眠状态的 mysql 连接引起的。
SHOW PROCESSLIST;
输出 :
| 356058234 | Y | X:39119 | D | Sleep | 1442 | | NULL |
| 356058441 | Y | X:39126 | D | Sleep | 1442 | | NULL |
| 356059383 | Y | X:46615 | D | Sleep | 2049 | | NULL |
| 356059389 | Y | X:46617 | D | Sleep | 2052 | | NULL |
| 356065991 | Y | X:39267 | D | Sleep | 1442 | | NULL |
-------------
452 rows in set (0.00 sec)
还mysqlreport
__ Connections _________________________________________________________
Max used 8001 of 8000 %Max: 100.01
Total 356.07M 58.6/s
这表明我真的没有连接了。即使限制为 8000。这里必须有一些东西。但是调试这样的事情可能很麻烦。
无论如何,我用 netstat 查看了进程 ID,例如netstat -ntp | grep :39267
输出如下:
tcp 0 0 IP_1:3306 IP_2:38727 VERBUNDEN 791/mysqld
因此,我更进一步,查找791
打印出的长字符串(几百行),看起来像这里的那些:
tcp 0 0 IP_1:3306 IP_2:34109 VERBUNDEN 791/mysqld
tcp 0 0 IP_1:3306 IP_3:32864 VERBUNDEN 791/mysqld
tcp 0 0 IP_1:3306 IP_3:37231 VERBUNDEN 791/mysqld
tcp 0 0 IP_1:3306 IP_2:38727 VERBUNDEN 791/mysqld
tcp 0 0 IP_1:3306 IP_2:36645 VERBUNDEN 791/mysqld
但这告诉我什么?我应该收集哪些更多信息才能找到实际上导致太多连接问题的线索?
关于应用程序的更多信息:
我们在几台服务器上运行代码——在我们的数据库上更新、插入和删除相当大的内容,这些服务器通过分叉框架Gearman获取这些数据。我们正在运行一个MySQL INNODB 数据库,它被我们的PHP 5.4和Zend Framework驱动的应用程序使用。操作系统是Linux(Debian)。