PHP脚本中的损坏堆

Posted

技术标签:

【中文标题】PHP脚本中的损坏堆【英文标题】:Corrupt heap in PHP script 【发布时间】:2013-02-10 02:11:29 【问题描述】:

zend_mm_heap corrupted 在我为预渲染大型环境而编写的 php 程序中出现错误消息。

我怀疑这是由于脚本中的变量分配过多引起的,尽管我不确定这一点,因为我编写的脚本在任何给定时间只有大约 20 个变量,其中一个是可能包含的数组多达 500 个元素。也就是说,总的迭代次数在几十亿左右。

我的怀疑是否正确,如果正确,有什么可以解决的吗?例如,运行脚本一段时间,然后将重要的变量转储到文件中并重新启动脚本,让它拾取这些变量并继续运行会更好吗?

【问题讨论】:

你已经看过这个了吗? ***.com/questions/2247977/… 是的,我有。没有一个答案似乎相关。我没有使用 OB,我使用的是一个对象,但我尝试使用过程函数,但错误仍然发生,数组的大小是通过在添加之前检查它来明确控制的,我使用的是 Windows,等等。跨度> PHP 错误日志中有什么内容吗?有时,即使您的脚本设置为显示所有错误,屏幕上也可能没有显示其他信息。 无非是损坏的堆消息。没有行号或任何东西。 您是否尝试过增加 php.ini 中的可用内存?如果我要尝试修复您的代码,我会逐步评论热点以查看问题何时停止,同时让程序输出进度无缓冲。也就是说,数十亿周期的代码不是 PHP 的用途。考虑为您的特定目的编写插件(mod)。不过我不能给你具体的帮助。 【参考方案1】:

我已经看到了这个问题,并且可以使用 phalcon 重现它,但它似乎源自 APC 缓存。我通过从 APC 切换到 zend opcache 来修复。您可以尝试禁用 APC 以查看它是否会消失。

从我的调查中我能得出的最好的结论是 APC 正在对 zend 正在使用的内存做一些事情。 PS,和zend框架没有关系,是zend部分被合并到php中的错误。

【讨论】:

【参考方案2】:

您的问题的解决方案是下载与您的 PHP 版本兼容的最新版本的 APC。

您必须强制安装它,使其覆盖旧版本的 APC。在许多情况下,这将解决您遇到的问题。

【讨论】:

以上是关于PHP脚本中的损坏堆的主要内容,如果未能解决你的问题,请参考以下文章

Zip文件在接收时损坏

PHP base64_encode PDF文件已损坏

PHP 文件下载总是损坏(50% 的时间)

dataType json 的 jQuery $.ajax 请求不会从 PHP 脚本中检索数据

脚本编辑器“损坏的字典”

PHP - Twitter API - 使用空间时请求损坏