使用 WordPress 构筑的 Blog 最近总是会报告 “建立数据库连接时出错” ,查看 Apache 的日志得到如下信息
1 |
$ sudo vim /var/log/apache2/error.log |
在日志的最后得到类似如下的内容
1 |
[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 怎么会无缘无故的没有了呢。
于是查看系统日志
1 |
$ sudo vim /var/log/syslog |
看到如下的输出
1 2 3 4 |
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 动作。执行
1 |
$ free -lm |
可以看到,实际的内存已经严重不足了,这台机器只配置了512M内存,跑一阵子之后,系统的剩余内存不足 10MB的样子了。
没办法,花钱加内存到1G。悲剧的是,还是会死掉,具体解决办法可以查看
Ubuntu 12.04下安装配置Worker工作模式的Apache 支持PHP
Ubuntu 12.04 Apache2 安装 PHP-FPM 增强 PHP5-CGI 的功能
通过限制DefaultMaxClassProcessCount 的数量来限制php5-cgi 的数量来避免太多的并发进程耗尽资源。