InnoDB:无法为缓冲池分配内存

InnoDB:无法为缓冲池分配内存

几周前,我在我的服务器 (lamp) 上添加了一个 wordpress 网站,该服务器还运行着其他几个网站,但 mysql 时不时就会崩溃。mysql 日志包含:

InnoDB: Cannot allocate memory for the buffer pool

这表明我的内存不够。

该服务器有 1GB RAM,如果我没记错的话,它包含 2GB 交换空间:

在此处输入图片描述

innodb_buffer_pool_size = 128.0M

服务器的流量很低,网站每天的访问者总数约为 150 人。

我知道我可以降低 inno_db_buffer_size,但这并不能解决高内存使用率的问题。

我怀疑是 wordpress 导致的,因为它是在添加 wordpress 网站后启动的。我该如何检测错误的原因以避免 mysql 崩溃。

答案1

跟我重复一遍:

MySQL 没有崩溃。

这是一种常见情况,“崩溃”是一种常见的误解……但实际上,MySQL 几乎肯定会被杀由于严重的内存不足情况而被系统关闭,这通常是由 Apache 引起的。

sudo egrep 'kernel|oom' /var/log/syslog

请注意,这不是崩溃:

InnoDB: Cannot allocate memory for the buffer pool

这是 MySQL 无法重新启动,即使它在被杀死后尝试恢复,因为仍然服务器上没有 128 MB 的可用内存,因为 apache 子进程消耗了所有内存。

重新启动后,没有人连接到您的网站,因此内存问题就消失了。

https://dba.stackexchange.com/a/25083/11651

您需要更多内存,或者您需要在不同的机器上运行 Apache 和 MySQL,或者您需要配置 Apache 以在负载下需要更少的内存。

出于对善与正的爱,绝不使用 mysqltuner 或类似工具。它们会进行猜测,给出错误的建议,而且它们不是你的朋友。保留 MySQL 默认值。

相关内容