什么是“zend_mm_heap corrupted”的意思?

133

最近我的应用程序出现了之前从未遇到过的问题。我决定查看Apache的错误日志,结果发现一个错误消息,显示"zend_mm_heap corrupted"。这是什么意思。

操作系统:Fedora Core 8 Apache版本:2.2.9 PHP版本:5.2.6


3
我使用了USE_ZEND_ALLOC=0来获取错误日志中的堆栈跟踪信息,发现了一个错误/usr/sbin/httpd: corrupted double-linked list,我发现注释掉opcache.fast_shutdown=1对我有用。 - Spidfire
是的,我也是。还可以看到下面的另一个报告 https://dev59.com/AHE95IYBdhLWcg3wlu4g#35212026 - lkraav
我在使用Laravel时遇到了同样的问题。我将一个类注入到另一个类的构造函数中。我注入的类又注入了它所注入的类,从而导致了堆问题。简而言之,就是创建了一个循环引用。 - Thomas
1
重新启动Apache服务器是最快和临时的解决方案 :) - Leopathu
41个回答

0

由于其他答案都没有解决这个问题,当我意外运行了一个无限循环时,我在php 5.4中遇到了这个问题。


0

对我来说,是ZendDebugger导致了内存泄漏并导致MemoryManager崩溃。

我已经将其禁用,并正在寻找更新版本。如果找不到,我将切换到xdebug...


0
因为我从未找到解决方案,所以我决定升级我的LAMP环境。我选择了Ubuntu 10.4 LTS和PHP 5.3.x。这似乎已经解决了我的问题。

0

我曾经也遇到过同样的问题,但是上面的解决方法都没有帮助到我。后来我认真检查了一下,发现我的问题在于在向缓冲区发送一些输出后尝试执行die(header()),这个代码的编写者忘记了CakePHP资源,并没有简单地使用"return $this->redirect($url)"。

试图重新发明轮子,这就是问题所在。

我希望这篇文章能够帮助到某些人!


0

PHP在2014年11月13日修复了一个错误:

修复了错误#68365(在zend_hash_copy中发生内存溢出后,zend_mm_heap受损)。

这个问题已经在版本5.4.35、5.5.19和5.6.3中得到更新。在我的情况下,当我从使用Ubuntu官方的trusty软件包(5.5.9+dfsg-1ubuntu4.14)改为使用Ondrej Sury打包的5.5.30版本时,问题消失了。其他解决方案对我都没有用,而且我也不想禁用opcache或抑制错误,因为这真的会导致段错误(500响应)。

Ubuntu 14.04 LTS:

export LANG=C.UTF-8       # May not be required on your system
add-apt-repository ondrej/php5
apt-get update
apt-get upgrade

0
对我来说,是使用Xdebug和PHPStorm连接RabbitMq,在“设置/语言和框架/PHP/调试/Xdebug”中取消“可以接受外部连接”的勾选。

0

如果有人和我一样遇到了这个问题,我想提供一下解决方案。

我在Windows上安装了php,但是安装在系统驱动器(C:)以外的另一个驱动器(H:)上。

在我的php.ini文件中,几个不同的文件系统变量的值都写成了\path\to\directory,如果我的安装在C:上,这样做就没问题。

我需要将值更改为H:\path\to\directory。在我的php.ini文件的几个不同位置添加驱动器号码立即解决了问题。我还确保(虽然我认为这并非必要)在我的PEAR config中修复了相同的问题,因为几个变量值也在那里排除了驱动器号码。


0

这里的许多答案都已经过时了。对于我来说(通过Ondrej Sury的PPA在Ubuntu 14.04和16.04上使用php 7.0.10),问题似乎出现在APC中。我正在使用apc_fetch()等缓存数百个小数据块,当我使一部分缓存无效时,就会出现错误。解决方法是切换到基于文件系统的缓存。

更多详细信息请参见github https://github.com/oerdnj/deb.sury.org/issues/452#issuecomment-245475283


0

在本地使用Docker和PHP的内置开发服务器与Craft CMS开发时,我遇到了这个问题。

我的解决方案是为Craft的会话使用Redis。

PHP 7.4


有没有进一步调查为什么会有帮助?是会话过大导致了某种溢出吗? - bkulyk

0

我也注意到了这个错误和SIGSEGV,当在PHP 5.2+中运行旧代码时,使用“&”来显式强制引用。


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