首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php调用oom-杀手

php调用oom-杀手
EN

Server Fault用户
提问于 2011-12-27 23:06:50
回答 3查看 8K关注 0票数 0

我看到了一个问题,PHP可以完美地工作几天,然后决定填充所有内存+交换和调用OOM-Killer。在这种情况发生后,服务器就完全死了,您甚至不能再将SSH放入其中了。一次艰难的重新启动必须使事情恢复正常。

我想知道为什么会发生这种情况,如果有修复或解决办法,比如限制它可以使用的内存量,或者如果进程开始使用太多,就重新启动进程。

我捕捉到内核转储发生的最后几次。

  1. http://pastebin.com/raw.php?i=rX6jYDe0
  2. http://pastebin.com/raw.php?i=f2qx5GcS

我的php-fpm.conf

  1. http://pastebin.com/raw.php?i=27hvN27q

我的www.conf:

  1. http://pastebin.com/raw.php?i=VgYtut9j

如果我还能给你提供更多关于为什么会发生这种情况的信息,请告诉我。

EN

回答 3

Server Fault用户

发布于 2011-12-28 06:41:14

您可能需要了解所有内存分配是否是由一个不寻常的请求引起的(在这种情况下,您必须修复代码),或者这是一个渐进内存泄漏的结果。在后一种情况下,您可以减少max_requests参数以更频繁地重新启动PHP子级。

如果无法修复代码中的问题,则可能需要使用肮脏的黑客。比如,编写一个脚本来监视PHP内存的消耗并重新启动它。

还有一种方法可以限制给定进程的内存消耗(如描述的这里),但我没有机会对其进行测试。

票数 2
EN

Server Fault用户

发布于 2011-12-28 06:45:48

尝试将pm.max_requests降低到一些较低的值(1000)。而且,您有高的pm.start_servers、pm.start_servers、pm.max_spare_servers值和极高的pm.max_children。

票数 2
EN

Server Fault用户

发布于 2011-12-28 13:08:36

关于OOM,有很多很棒的信息。如果您想了解正在发生的事情,我建议您使用以下更多的关键字来搜索它

我自己也有过一个客户项目,我不得不处理这个问题。不幸的是,上面推荐的任何一个都没有帮助,因为这与内核有关。OOM是用于在linux中过度提交内存的一个肮脏的解决方案。

帮助(我)的是设置一些内核参数,从而完全避免OOM。若要快速修复它,请向/etc/sysctl.conf中添加以下行,以使更改在引导过程中保持不变:

代码语言:javascript
复制
vm.overcommit_memory = 2
vm.overcommit_ratio = 80

不过,我建议阅读OOM。你可能会找到一些更有用的信息。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/344525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档