Mysql show processlist列出了许多进程sleep和info = null?

Alf*_*TeK 12 mysql mysql-management

我正在我的网络应用程序注入压力测试,连接到mysql服务器,我正在监视mysql的show processlist.

当负载很高(高交换i/o)时,我会得到很多这样的过程:

| 97535 | db| localhost | userA | Sleep   |  515 |         | NULL 
| 97536 | db| localhost | userA | Sleep   |  516 |         | NULL 
| 97786 | db| localhost | userA | Sleep   |  343 |         | NULL 
| 97889 | db| localhost | userA | Sleep   |  310 |         | NULL 
Run Code Online (Sandbox Code Playgroud)

但是我不明白他们为什么还在那里而且没有被杀?这最终导致我的应用程序使用所有max_connections并停止处理传入的请求...

知道那些流程是什么,他们在那里做什么:)?

Kei*_*all 15

这些是客户端持有的空闲连接.您应该确保您正在使用的任何客户端库(JDBC,...)配置为不使未使用的连接保持打开这么长时间,或者您的#clients*max#of connections不是太大.

  • 您可以将wait_timeout设置为较小的值(http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_wait_timeout)或提高连接限制.但是,您确实希望在应用程序端解决此问题.挂起数据库端的连接可能会在应用程序尝试使用它时关闭连接,从而可能导致应用程序错误.你使用什么数据库连接库? (4认同)
  • @KeithRandall 但如何识别空进程? (2认同)