MySQL 在服务器负载过大时崩溃

MySQL 在服务器负载过大时崩溃

我安装了一个新的 Ubuntu Server 12.04 实例,并使用基本 lamp 配置将其配置为基本 Web 服务器。此处 apache 和 mysql 的所有设置均采用其默认设置,但我看到在 apache 负载过大的情况下随机服务崩溃。

Apache 在负载下会启动许多 www-data 线程,这很正常,内存会慢慢开始消耗。当服务器达到最大内存负载时,它会开始终止进程​​,其中最常见的是 mysql。

我查看了 mysql 日志,其中一部分如下所示。一切都运行良好,直到我这里的内存不足。我在 mysql 中运行的唯一东西是默认的 wordpress 数据库,所有表都在 MyISAM 引擎上。这些是崩溃时的 mysql 日志:

130716 14:41:12 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130716 14:41:12 [ERROR] Plugin 'InnoDB' init function returned error.
130716 14:41:12 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130716 14:41:12 [ERROR] Unknown/unsupported storage engine: InnoDB
130716 14:41:12 [ERROR] Aborting

以下是崩溃时的服务器日志:

Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183276] apache2 invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183283] apache2 cpuset=/ mems_allowed=0
Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183287] Pid: 29348, comm: apache2 Not tainted 3.2.0-49-virtual #75-Ubuntu
Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183290] Call Trace:
Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183301]  [<ffffffff81119b31>] dump_header+0x91/0xe0
Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183305]  [<ffffffff81119eb5>] oom_kill_process+0x85/0xb0
Jul 16 16:47:36 ip-172-31-36-128 kernel: [728613.183309]  [<ffffffff8111a25a>] out_of_memory+0xfa/0x220

答案1

要么增加更多 RAM 来应对增加的负载,要么限制 apache 进程的数量以确保 MySQL 不会被终止。另外,确保您的 VPS 有交换空间(许多 VPS 提供商不提供此项)

相关内容