自从wordpress网站装好之后一直有个问题没有解决,就是进行网站测试的时候经常会出现“建立数据库连接时出错”,就算平常使用,网站被恶意攻击并发数太多的时候也会出现这个问题,导致网站打不开,而我并不知道网站已经挂掉了,结果一天没有流量。今天无意外的又碰到了这种情况,下决心要把它解决了。
网上各处找资料,终于查到了源头,原来是Apache的httpd进程数过多导致mysql被系统kill掉了。使用top命令查询系统内存使用情况,mysql固定占用10%,而httpd每个占用4-7%不等,如果并发数超过15个,很容易加起来内存使用超过100%,而mysql是最大的,理所当然被kill了。对网站进行压力测试,果然,内存使用一满,mysql就被kill。
下面讲下解决办法。
网上的教程都是修改apache下的httpd.conf文件,但是我这个系统不知道怎么装的,比较奇葩,在 /etc/apache2目录里并没有httpd.conf这个文件!开始我还专门创建了一个,按推荐的内容进行配置,但是发现根本没起作用。后来在另一篇文章发现,新的apache配置文件已经放在apache2.conf里面了,于是对这个进行更改。使用命令 sudo nano apache2.conf ,要修改的项为:
- Timeout 30
- KeepAliveTimeout 2
- <IfModule mpm_prefork_module>
- StartServers 4
- MinSpareServers 4
- MaxSpareServers 8
- MaxClients 10
- ServerLimit 10
- MaxRequestsPerChild 40
- </IfModule>
反正是整体都给改小了,保存后在进行压力测试,并发50的时候不会崩溃,并发100的时候就是很慢,但是mysql不会被kill掉了。
参考文章: