mysql出现大量sleep进程原因与解决方法

以前也曾遇到过类似的问题,导致此问题的原因从网上查了,大体有几下几种原因:

造成睡眠连接过多的原因?

1. 使用了太多持久连接(个人觉得,在高并发系统中,不适合使用持久连接)

2. 程序中,没有及时关闭mysql连接

3. 数据库查询不够优化,过度耗时。

当然,更根本的方法,还是从以上三点排查之:

1. 程序中,不使用持久链接,即使用mysql_connect而不是pconnect。

2. 程序执行完毕,应该显式调用mysql_close

3. 只能逐步分析系统的SQL查询,找到查询过慢的SQL,优化之p

我是用排除法去定位问题,对于此原因,1和3通过分析,发现根本不满足

此处先排除是mysql 配置的问题,sleep的关闭时间是8个小时,默认值(show variables like 'wait_timeout';),并且服务器配置都是运维人员维护,我们的运维还是很出色的

排除1:

我的业务,php链接mysql并没有使用持久链接 mysql_pconnect,高并发系统框架中,都不会用持久链接的

排除3:

数据库查询不够优化?自己写的,不能够。如果真的有不够不够优化的sql,可以开启mysql慢查询日志查看,并优化之;还有一点就是我的这个业务通过看数据库昨日、今日两天的访问情况,读写都不是很多,表的数据量只有二百多万条,而且已经线上正常运营了很久,假如有不够优化的查询,早就挂了。

那问题只有可能是 2 程序中,没有及时关闭mysql连接, 造成这个问题的原因很多,也很难分析。一般只要是框架里,都会即时关闭mysql链接的(mysql_close),页面访问完,mysql链接必然会自动关闭

网上有一个哥们写了一个,

 代码如下 复制代码

define('MAX_SLEEP_TIME', 120);

$hostname = "localhost";
$username = "root";
$password = "password";

$connect = mysql_connect($hostname, $username, $password);
$result = mysql_query("SHOW PROCESSLIST", $connect);
while ($proc = mysql_fetch_assoc($result)) {
if ($proc["Command"] == "Sleep" && $proc["Time"] > MAX_SLEEP_TIME) {
@mysql_query("KILL " . $proc["Id"], $connect);
}
}
mysql_close($connect);
?>

将当中的$password 改成你实际的数据库密码,sleep连接的时间也可以修改,然后加入计划任务就可以了。比如用 crontab -e 命令加入:

 代码如下 复制代码
*/2 * * * * php /usr/local/sbin/kill-mysql-sleep-proc.php

就可以每隔 2 分钟检查并清除一次数据库中的sleep连接了

如果你没有修改过MySQL的配置,缺省情况下,wait_timeout的初始值是28800

wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个值设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题,通常来说,我觉得把wait_timeout设置为10是个不错的选择,但某些情况下可能也会出问题,比如说有一个CRON脚本,其中两次SQL查询的间隔时间大于10秒的话,那么这个设置就有问题了(当然,这也不是不能解决的问题,你可以在程序里时不时mysql_ping一下,以便服务器知道你还活着,重新计算wait_timeout时间):

 代码如下 复制代码

# vi /etc/my.cnf

[mysqld]

wait_timeout=10

# /etc/init.d/mysql restart

不过这个方法太生硬了,线上服务重启无论如何都应该尽可能避免,看看如何在MySQL命令行里通过SET来设置:

 代码如下 复制代码

mysql> set global wait_timeout=10;

mysql> show global variables like '%timeout';

+----------------------------+-------+

| Variable_name | Value |

+----------------------------+-------+

| wait_timeout | 10 |

+----------------------------+-------+

时间: 2024-10-29 08:29:15

mysql出现大量sleep进程原因与解决方法的相关文章

【MySQL】常见slave 延迟原因以及解决方法

一  序言 在运维线上M-M 架构的MySQL数据库时,接收的比较多关于主备延时的报警: check_ins_slave_lag (err_cnt:1)critical-slavelag on ins:3306=39438 相信slave 延迟是MySQL dba 遇到的一个老生长谈的问题了.先来分析一下slave延迟带来的风险   1. 异常情况下,主从HA无法切换.HA 软件需要检查数据的一致性,延迟时,主备不一致.    2. 备库复制hang会导致备份失败(flush tables wi

360浏览器崩溃的几种原因与解决方法

  最近,有360浏览器的用户反映说,当他打开360浏览器的时候,系统提示:此页面已崩溃,无法正确显示.这位用户遇到的就是360浏览器崩溃的问题,那么,是什么原因造成360浏览器崩溃,遇到360浏览器崩溃,用户该怎么解决呢?下面,就一起来看看小编给大家整理的360浏览器崩溃的几种原因与解决方法! 360浏览器崩溃 造成360浏览器崩溃的原因: 360浏览器开太多标签占用了内存问题,并且随着浏览器开着的时间越长,占用内存量就越大. 360浏览器版本太低的问题,有些用户是不喜欢升级浏览器版本的,那么

Windows7中U盘无法停止通用卷的原因跟解决方法

在使用U盘过程中,遇到最郁闷的问题就是使用完U盘要安全移除U盘的时候弹出"无法停止通用卷".很多时候弹出这个我们基本上就不关它了,直接把U盘拔出来了.但是如果有一次你直接这样拔出U盘,然后下次使用U盘的时候你发现数据丢失了(虽然这个概率不高我也就遇到一次),我丢失的那一次让我有哭的冲动.所以以后我要把出U盘如果弹出"无法停止通用卷",我甘愿等到我电脑不用了.关机完我再拔出U盘,也不敢直接移除了.而这篇文章是跟大家分享下我个人总结的U盘无法停止通用卷的原因跟解决方法

电脑蓝屏的原因及解决方法

几乎所有使用电脑的朋友都遇到过电脑蓝屏的现象,电脑蓝屏是一个非常普遍的现象,即使是比尔.盖茨在介绍Windows 98 功能的发布会这么重要的场合仍未能避免蓝屏现象,之所以电脑蓝屏现象很常见,是因为电脑蓝屏的发生有着多种原因,硬件出现问题,硬件之间不兼容,软件之间 不兼容都可能造成蓝屏的问题!今天就为大家介绍下电脑蓝屏的原因及解决方法,希望对大家解决电脑蓝屏现象有所帮助! 电脑蓝屏原因 1.软件兼容性问题引起电脑蓝屏 刚安装的系统,若驱动与硬件不兼容可能会导致蓝屏现象,建议安装硬件赠送光盘中的驱

Win7系统电脑鼠标突然间不动的原因和解决方法

  Win7系统电脑鼠标突然间不动的原因和解决方法          鼠标突然间不动的解决分析一: 1.重新插拔下试试. 2.鼠标本身出问题了,零件之间接触不良,建议换个鼠标试试,如果换个解决问题,就是鼠标的问题. 3.是否USB接口松动或者USB接口出问题,接触不良,换个接口看看. 4.鼠标的驱动出现问题了,可以下载驱动精灵之类的软件,安装相应驱动. 其次: 1.供电问题,可能是USB接口没有数据传输,换用其他USB接口; 2.驱动问题,重新安装驱动或者更新驱动即可; 3.鼠标坏掉,更换新鼠标

Win7提示Svchost.exe应用程序错误的原因及解决方法

  一.Svchost.exe进程的功能作用 svchost.exe是Windows操作系统中的一个系统程序,对系统的正常运行起到了重要的作用,它是系统不可或缺的进程,故它是不能被结束的.Svchost.exe文件存在于X:Windows/system32目录下,是Windows 系统中核心的重要进程 ,它可用来运行动态链接库DLL文件,从而启动对应的服务. 二.造成系统出现svchost.exe应用程序错误提示的原因及解决方法 1.病毒木马:由于svchost进程可启动各种服务,故病毒.木马也

数据库-select @@identity as id的返回值偶尔出现0原因及解决方法

问题描述 select @@identity as id的返回值偶尔出现0原因及解决方法 3C 在执行插入语句后,数据插入到数据库中,然后用同样的dbconn执行select @@identity as id语句,有些时候返回了正常的自增id,可是有些时候返回了0,请问一下有大神知道原因及解决方法吗??? 解决方案 补充一下,数据库是mysql,执行语句用的是java的jdbc,麻烦各位大神了 解决方案二: QT出现"undefined reference to `vtable for'&quo

mysql安装时出现各种常见问题的解决方法_Mysql

小编为大家整理许多mysql安装时出现各种常见问题的解决方法,供大家参考,具体内容如下 问题一: 当各位在安装.重装时出现could not start the service mysql error:0原因: 卸载mysql时并没有完全删除相关文件和服务,需要手动清除. 安装到最后一步execute时不能启动服务的解决方法: 首先,在管理工具->服务里面将MySQL的服务给停止(有的是没有安装成功,有这个服务,但是已经停止了的),win+R->cmd,打开命令提示符窗口,输入命令:sc de

php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法_php技巧

本文实例讲述了php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法.分享给大家供大家参考,具体如下: 微信支付api.mch.weixin.qq.com域名解析慢了,导致付款时非常的慢,那么要如何来解决微信支付慢的问题呢,这里就来一起分析一下. 有朋友在阿里云主机实现微信支付逻辑时,发现api.mch.weixin.qq.com的解析实在是太慢了. 因此出现了手动修改/etc/hosts的情况,当然了,哪天微信支付要是换个机房肯定要挂. 我们的机房也有相似的同题,专