日期:2014-05-16  浏览次数:20635 次

linux-debian5 DateBase Err: 1040: Too many connections 真正解决方法

问题现象:
今天配置了一台用于数据统计的linux服务器,访问量在200万以上,开始以前配置顺利,域名生效,访问统计链接,出现 DateBase Err: 1040: Too many connections?
?

解决过程
第一反应,修改MYSQL 的参数 max_connections=4087
运行了不到2分钟,服务器平均负载狂飙到>400 瞬间当机,显而易见,连接数加大给服务器带来了巨大压力,可是407的连接数并不算多。
apache 配置有问题?

?
mysql 配置有问题?
查了一边又一遍。。。
原来问题出在PCONNECT
PCONNECT是不会在查询完成后就关闭,而是会等待一定时间,这个时间可以由MYSQL上的wait_timeout设定
而且mysql_close并无法关闭pconnect所开启的连线,只能关闭connect所开启的资料库连线。当然如果没有CLOSE在经过TIMEOUT时间之后也是会被DB DROP掉。
PCONNECT必须要小心使用,在写的不好的CODE中,会残留一大批的DATABASE CONNECTION
最大值可以这样计算每台SERVER的APACHE行程数 * 所有WEB SERVEWR数量,每个连线都会消耗DB的CPU TIME与MEMORY
PCONNECT是傻瓜式的模拟连接池的方法,系统负载会疯狂上升。

解决方法:
修改php.ini参数为
[MySQL]
; 允许或阻止持久连接.
mysql.allow_persistent = Off

修改my.cnf参数为
max_connections = 600 (建议600~1000 一般大于apahce的MaxClients )
wait_timeout = 5
最后上效果图: