注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云淡风轻

云淡风轻近午天,傍花随柳过前川。

 
 
 

日志

 
 

[mysql]遇到一个 Too Many Connections Error 的问题  

2010-06-28 23:25:11|  分类: 格物致知 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
平台的问题还是挺多的。
今天遇到一个mysql报Too Many Connections Error问题。具体情况是:
底层结构里,和数据库的连接是使用长连接。服务器是apache加mod_wsgi,mod_wsgi配置了40个进程,线程数为1。每个进程里保持着4个数据库连接。这样算起来最多应该只需要160个连接,但数据库配置了200个连接!(以上数据并不是真实的数据,但和真实的情况是一样的。)按理来说,是不可能出现连接数不够的情况的。但当访问量大的时候,这个错误非常地多,导致前台不停地报500的错误。
在web服务器的机器上看连接数
  web# netstat -a -n | grep -c 3306
得到的数字没有超过160,但是在db机器上看mysql连接数:
  db# echo 'show processlist' | mysql | wc -l
却一直得到一个201的连接数
  db# echo 'show processlist' | mysql | cut -f5,6 | sort -n -r | head
可以看到,很多连接都是Sleep状态,而且都空闲了半个小时以上的。

就是说,当web服务器这边的进程已经不再使用这个连接了,应该也释放了,但mysql服务器还保持着。
当然也不确定是否是web服务器的进程的问题。

我的猜想是mod_wsgi配置里有maximum-requests=5000,进程每处理完5000个請求后会重启。这个配置是为了防止有内存泄漏。但可能进程重启了,但mysql的连接没有释放。

暂时的解决方法是,把mysql的wait_timeout设成60秒。默认是28800秒,8个小时啊!这个配置的意义是:当客户端超过这个时间都没有发任何东西过来时,mysqld才把连接断掉。就是说,默认的连接都是长连接。
另外一个配置connect_timeout是说,一个命令,如果在这个时间里还没传送完的话,就会提示错误,一般就是Lost connection to mysql server at xxx
  评论这张
 
阅读(633)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017