WordPress报告 “建立数据库连接时出错” 的问题

使用 WordPress 构筑的 Blog 最近总是会报告 “建立数据库连接时出错” ,查看 Apache 的日志得到如下信息

$ sudo vim /var/log/apache2/error.log

在日志的最后得到类似如下的内容

[Mon Jan 06 16:30:06 2014] [error] [client 5.10.83.83] WordPress SELECT * FROM wp_posts  WHERE (post_type = 'page' AND post_status = 'publish')     ORDER BY menu_order,wp_posts.post_title .......MySQL server has gone away

这个 “MySQL server has gone away” 有些莫名奇妙,MySql 怎么会无缘无故的没有了呢。
于是查看系统日志

$ sudo vim /var/log/syslog

看到如下的输出

Jan  6 16:30:05 AY130422143404983ad9 kernel: [236491.346180] Out of memory: Kill process 755 (mysqld) score 91 or sacrifice child
Jan  6 16:30:05 AY130422143404983ad9 kernel: [236491.346267] Killed process 755 (mysqld) total-vm:887016kB, anon-rss:45820kB, file-rss:0kB
Jan  6 16:30:05 AY130422143404983ad9 kernel: [236491.422036] init: mysql main process (755) killed by KILL signal
Jan  6 16:30:05 AY130422143404983ad9 kernel: [236491.422096] init: mysql main process ended, respawning

可以明显看到,是由于系统内存不足,导致了 Linux 系统自带的 OOM Killer 动作。执行

$ free -lm

可以看到,实际的内存已经严重不足了,这台机器只配置了512M内存,跑一阵子之后,系统的剩余内存不足 10MB的样子了。

没办法,花钱加内存到1G。悲剧的是,还是会死掉,具体解决办法可以查看

Ubuntu 12.04下安装配置Worker工作模式的Apache 支持PHP
Ubuntu 12.04 Apache2 安装 PHP-FPM 增强 PHP5-CGI 的功能

通过限制DefaultMaxClassProcessCount 的数量来限制php5-cgi 的数量来避免太多的并发进程耗尽资源。

发布者