为什么我在运行脚本以屏幕抓取网页时出现“zend_mm_heap损坏”


Why I am getting "zend_mm_heap corrupted" when run a script to screen scrape a webpage?

我在运行脚本以屏幕抓取网页时遇到"zend_mm_heap损坏"。请让我知道,如何解决此问题。

我假设你正在使用Apache和mod_php来回答这个答案。

当 apache 生成太多实例占用所有 RAM 时,我收到此错误,然后尝试使用磁盘交换,然后响应会不断变慢,直到最终崩溃,并且会出错。重新启动 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。所以我将我的MaxClient设置为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设置对您的服务器来说太激进了。

希望这有帮助!

尝试在 php 中增加output_buffering.ini

请参阅此问题output_buffering

1)你能给我们一些代码看看吗?2)在php.ini中增加output_buffering可以解决问题,并确保删除所有不需要的引用。