sleep 进程

为什么大量的 sleep 进程

参考链接:

原因:

  • 使用了太多持久连接(个人觉得,在高并发系统中,不适合使用持久连接)
  • 客户端程序在退出之前没有调用 mysql_close().
  • 客户端sleep的时间在wait_timeout或interactive_timeout规定的秒内没有发出任何请求到服务器.
  • 客户端程序在结束之前向服务器发送了请求还没得到返回结果就结束掉了。数据库查询不够优化,过度耗时

    解决办法

    数据库层面

    永久修改,修改配置文件
  1. # vi /etc/my.cnf
  2. [mysqld]
  3. wait_timeout=10
  4. # /etc/init.d/mysql restart

临时修改

  1. mysql> set global wait_timeout=10;
  2. mysql> show global variables like '%timeout';

代码层面

  • 程序中,不使用持久链接,即使用mysql_connect而不是pconnect。
  • 程序执行完毕,应该显式调用mysql_close
  • 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之

    持久化链接

    Mysql 允许最大的连接数:
  1. show variables like "max_connections";

临时修改:

  1. set GLOBAL max_connections=1000;

永久修改, 文件 /etc/my.cnf:

  1. [mysqld]
  2. max_connections = 200