【问题标题】:Why I am getting "zend_mm_heap corrupted" when run a script to screen scrape a webpage?为什么在运行脚本屏幕抓取网页时出现“zend_mm_heap 损坏”?
【发布时间】:2014-05-10 19:48:57
【问题描述】:

运行脚本以筛选抓取网页时,我得到“zend_mm_heap 损坏”。请告诉我,如何解决此问题。

【问题讨论】:

    标签: php


    【解决方案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 设置对您的服务器来说过于激进。

    希望这会有所帮助!

    【讨论】:

    • 谢谢。我会看的。
    【解决方案2】:

    尝试增加 php.ini 中的 output_buffering

    参考这个问题output_buffering

    【讨论】:

    • 感谢您的回复。 output_buffering 无助于解决该问题。
    【解决方案3】:

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

    【讨论】:

    • 感谢您的回复。 output_buffering 无助于解决该问题。
    • 所以没有代码我只能盲猜(不是我的选择)。
    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多