Sun 25 Mar 2007
前两天有个朋友找我,说他的一台服务器出问题了。
apache启动没多久 服务器就报错,是cpu过热。
我登录上去,发现apache已经被停止了 。这台机器配置还不错,xeon 2.8G 双核,2G内存,上面运行的是一个游戏相关网站和一个bbs,其中bbs是没有什么流量的,可以忽略。我将apache打开,没过多久,发现系统负载迅速上升,运行 netstat -an > ip.txt ,先将当前网络连接保存下来再说。 废了不少功夫,终于将apache关闭了了,一看系统负载,居然100多。我对ip.txt进行了一下检查,发现出了连接数特别多外,IP都很分散,应该不是攻击。问了一下,发现这个网站正发布一个新软件,几M大,很多人在下载。检查了my.cnf,有问题,居然将连接开到4000,然后其他配置是按照512M内存进行优化的,我将连接数限制在300,然后将 其他的一些参数根据2G内存的情况进行了优化。apache2的配置也有问题,连接数开到1500,太多了,改为800,重启apache2,这次系统负载没问题,只有1.x。我打开网站,发现网页报错,mysql 连接数太多。看了一下,居然mysql的400连接数已经用完了,再查看msyql slow log,没有慢查询语句。
现在的情况很明显了,应该是网站的内容发布系统mysql配置了持久连接,找到配置文件,将其中的$pconnect = 1改为 0,果然网站恢复正常了。 mysql持久连接能提高连接速度,一般可以提高性能。但是在大网站,因为连接数太多,如果使用持久连接的话反而得不偿失。至于cpu过热,是因为服务器的散热没作好,平时没问题,系统负载一高散热就出现问题了。
飞天的梦想 is proudly powered by