5

当系统内存不足时,ubuntu 12.04 会杀掉 mysql 进程:

Out of memory: Kill process 17074 (mysqld) score 146 or sacrifice child

所以这个过程最终被杀死。这发生在服务器负载的高峰期,主要是因为 apache 变得疯狂并吃掉了剩余的可用内存。可能的方法可能是:

  • 以某种方式更改mysql的优先级,因此它不会被杀死(可能是一个糟糕的修复,因为其他东西会被杀死)
  • 监控mysql的状态并在它被杀死时自动重启(我正在考虑,但不知道该怎么做)。

你怎么看?

4

2 回答 2

8

数据库服务器的突然终止是一个非常严重的崩溃。您需要在生产系统中避免这种情况,因为它可能无法干净地重新启动。

数据库服务器是一种共享资源,在生产中几乎永远不会以计划外的方式终止。唯一会导致意外终止的是灾难性的硬件或电源故障。大多数正确配置的生产数据库服务器每十年或更短的频率会意外终止一次。严重地。

该怎么办?

修复你的 apache 配置。限制它可以使用的工作线程和进程的数量,所以它不能乱跑。了解如何做到这一点。这是至关重要的。见这里:http ://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers

修复您的网络应用程序中导致您的 apache 疯狂运行的缺陷。

如果可以的话,将你的 mysqld 服务器从 apache 移到不同的服务器机器上,这样两者就不会争夺相同的硬件资源。

配置您的 mysqld 以限制它将接受来自 apache 工作线程或其他客户端的连接数。您的 Web 应用程序可能会处理工作线程需要等待连接的情况。看这里。http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_connections

您在 EC2 微型实例上吗?你需要做一些认真的调整。见这里:http ://ubuntuforums.org/showthread.php?t=1979049

于 2013-06-22T14:35:43.803 回答
3

您可以每分钟检查一次mysql状态(使用cron)并在崩溃时重新启动:

* * * * * service mysql status | grep running || service mysql restart
于 2015-04-04T09:03:12.557 回答