我看到了一个问题,PHP可以完美地工作几天,然后决定填充所有内存+交换和调用OOM-Killer。在这种情况发生后,服务器就完全死了,您甚至不能再将SSH放入其中了。一次艰难的重新启动必须使事情恢复正常。
我想知道为什么会发生这种情况,如果有修复或解决办法,比如限制它可以使用的内存量,或者如果进程开始使用太多,就重新启动进程。
我捕捉到内核转储发生的最后几次。
我的php-fpm.conf
我的www.conf:
如果我还能给你提供更多关于为什么会发生这种情况的信息,请告诉我。
发布于 2011-12-28 06:41:14
您可能需要了解所有内存分配是否是由一个不寻常的请求引起的(在这种情况下,您必须修复代码),或者这是一个渐进内存泄漏的结果。在后一种情况下,您可以减少max_requests参数以更频繁地重新启动PHP子级。
如果无法修复代码中的问题,则可能需要使用肮脏的黑客。比如,编写一个脚本来监视PHP内存的消耗并重新启动它。
还有一种方法可以限制给定进程的内存消耗(如描述的这里),但我没有机会对其进行测试。
发布于 2011-12-28 06:45:48
尝试将pm.max_requests降低到一些较低的值(1000)。而且,您有高的pm.start_servers、pm.start_servers、pm.max_spare_servers值和极高的pm.max_children。
发布于 2011-12-28 13:08:36
关于OOM,有很多很棒的信息。如果您想了解正在发生的事情,我建议您使用以下更多的关键字来搜索它
我自己也有过一个客户项目,我不得不处理这个问题。不幸的是,上面推荐的任何一个都没有帮助,因为这与内核有关。OOM是用于在linux中过度提交内存的一个肮脏的解决方案。
帮助(我)的是设置一些内核参数,从而完全避免OOM。若要快速修复它,请向/etc/sysctl.conf中添加以下行,以使更改在引导过程中保持不变:
vm.overcommit_memory = 2
vm.overcommit_ratio = 80不过,我建议阅读OOM。你可能会找到一些更有用的信息。
https://serverfault.com/questions/344525
复制相似问题