我的是Linode 1G空间的VPS,CentOS 7系统。上面目前安装了SS、Web(Apache)、MariaDb(MySQL)、PHP、Wordpress等服务。前两天在安装一个WP插件时,突然发现WP提示连接不上数据库。还以为是插件把WP弄掉了,看了一下日志,发现MySQL down了。
所以ssh上去,systemctl start mariadb.service,没成功,查看其log,发现InnoDB out of memory字样的提示。
free -h看了一下内存,发现只有几十MB内存可用,怪不得网页打开也慢的可怜。而MySQL默认要128MB的内存。
放狗找了一翻,有网页建议在 /etc/my.cnf 里的[mysqld]下面增加:
performance_schema=0
把performance方案关闭掉。
照做,重启,但问题仍然没有解决,MySQL无法启动。
通过top命令看了进程的内存使用情况,发现其中有很多个Apache进程,吃掉了很多内存。
因此修改了一下httpd.conf,将原Linode推荐的大数字改小,如下:
$vi /etc/httpd/conf/httpd.conf
<IfModule prefork.c>
StartServers 4
MinSpareServers 5
MaxSpareServers 6
MaxClients 100
MaxRequestsPerChild 1500
</IfModule>
重启Apache(systemctl reload httpd),再free -h,发现内存有500多可用了。再重启MySQL,发现问题消除。
总结:
- 在 /etc/my.cnf 里的[mysqld]下面增加:performance_schema=0
- 修改了一下httpd.conf,减少Apache启动的Server数
- 重启Apache,重启MariaDb/MySQL