当系统内存不足时,ubuntu 12.04 kill mysql进程:
Out of memory: Kill process 17074 (mysqld) score 146 or sacrifice child
所以这个进程最终被杀死了。 这发生在服务器负载高峰时,主要是因为 apache 变得疯狂并吃掉剩余的可用内存。可能的方法是:
- 以某种方式改变 mysql 的优先级,这样它就不会被杀死(可能是一个不好的修复,因为其他东西会被杀死)
- 监控mysql的状态并在它被杀死时自动重启(我正在考虑,但不知道该怎么做)。
你怎么看?
最佳答案
数据库服务器的突然终止是一种非常严重的崩溃。您需要在生产系统中避免这种情况,因为它可能无法干净地重新启动。
数据库服务器是一种共享资源,在生产中几乎不应该以计划外的方式终止。唯一会导致意外终止的是灾难性的硬件或电源故障。大多数正确配置的生产数据库服务器每十年或更短的频率就会发生一次计划外终止。说真的。
怎么办?
修复您的 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
关于mysql - 当 EC2 微型实例上的 ubuntu 在内存不足时将其杀死时自动重启 Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251240/