当运行一个屏幕抓取网页的脚本时,为什么会出现“zend_mm_heap corrupted”的错误?

3

当我运行一个脚本来筛选网页信息时,出现了 "zend_mm_heap corrupted" 错误。请告诉我如何解决这个问题。

3个回答

1
我会假设您使用带有mod_php的Apache来回答这个问题。
当apache生成过多的实例耗尽所有RAM时,我会收到此错误,并且尝试使用磁盘交换,然后响应会不断变慢,直到最终崩溃并SEGFAULT。重启apache服务将恢复一切,直到几分钟或几小时后再次发生。
以下是帮助我解决问题的文章: https://servercheck.in/blog/3-small-tweaks-make-apache-fly 基本上,查看每个apache进程使用了多少(在服务器上可能是httpd或nginx):
ps aux | grep 'apache' | awk '{print $6/1024 " MB";}'

找出每个进程的平均MB使用量,在我的实例中,每个进程大约为~40MB。

接下来找出您可以为Apache分配多少可用RAM。我的服务器大约有3.8GB的可用RAM供Apache使用。因此,我将3800 MB除以40 MB,得到95。所以我将我的MaxClients设置为95。自从我实施了这些更改以来,我还没有看到Apache在我的服务器上失控。当它是150时,它每8个小时就会崩溃一次,当它是250时,它每半个小时就会崩溃一次。

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients           95
    MaxRequestsPerChild 100
</IfModule>

如其他人所建议的那样,我已经尝试将输出缓冲区从4K一直调整到128K,但错误没有太大改善。如果您没有运行时间较长的进程,也可以尝试降低“超时”参数。在我的网络中,没有什么应该需要几秒钟以上的处理和交付时间。高(依我看)的默认值300被降低到15秒,这有助于解决任何被卡住的情况。
在此之前,我会看到负载接近130左右,系统应该是无响应的,但其他所有东西都正常。您的问题可能只是您的Apache mod_php设置对您的服务器过于激进。
希望这可以帮助!

谢谢,我会看一下的。 - user2944050

0

感谢您的回复。output_buffering并没有帮助解决这个问题。 - user2944050

0

1)你能给我们看一些代码吗? 2)也许增加php.ini 中的 output_buffering 可以做到这一点,并确保删除所有不必要的引用。


感谢您的回复。output_buffering并没有帮助解决这个问题。 - user2944050
所以,如果没有代码,我只能瞎猜(对我来说不是一个选项)。 - Uriziel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接