【问题标题】:zend_mm_heap corrupted with standard PHP 5.6: locating the causezend_mm_heap 被标准 PHP 5.6 损坏:定位原因
【发布时间】:2018-11-19 00:36:06
【问题描述】:

将 PHP 的 opcache 参数设置为 1(打开,默认值)会在 Apache 日志文件中以每天几次的频率不定期地出现“zend_mm_heap 已损坏”错误。

以前的 StackOverflow 答案表明这可能是因为 (a) 使用了其他缓存模块,例如 APC - 这里不是这种情况,因为仅使用标准 PHP 发行版而没有任何非本地缓存或 (b) 用完内存 - 但根据free -m 或 (c) PHP 编译器中的错误,我至少有 1.6G 可用交换空间 - 不太可能,因为这个错误没有被广泛报道,我没有做任何不寻常的事情。

服务器运行多个网站,使用 Drupal、Joomla 和定制 PHP 构建。我正在使用 Amazon Linux 2 上的事件 MPM 运行带有 mod_php 和 Apache 2.4.33 的标准 PHP5.6.36。

唯一不是完全标准的东西是我使用 Amazon AWS SDK for PHP v. 3 发送邮件,但我没有理由认为这是导致问题的原因。

如何找出导致堆损坏的原因?

【问题讨论】:

  • 在 6 月 25 日至 6 月 30 日期间,我有 60 条连续的 error_log 行,在 CentOS 7 和 PHP v5.5.382.0 Apache/2.4.6 上也是如此,有趣的是服务器除了一点停机时间之外继续运行

标签: php apache amazon-ec2 opcache


【解决方案1】:

看起来这个错误是reported。在 cmets 中,建议在 php.ini 中设置以下内容:

opcache.revalidate_freq=7000
opcache.fast_shutdown=0

【讨论】:

  • 我做了这些设置。 zend_mm_heap corrupted 消息的比率有所下降 - 在过去 24 小时内只有两条 - 但它们并没有消失。谜题是为什么我得到这个,虽然使用相当标准的 PHP 设置,但大概大多数其他人没有得到这些错误。因此我的问题是寻找原因(以及解决方案)。
  • Joe Watkins 很好地解释了为什么会发生这种情况 (stackoverflow.com/a/36350601/1050507)。不幸的是,这不是一个容易调试的问题。建议是禁用 opcache 或查找导致问题的代码。
猜你喜欢
  • 1970-01-01
  • 2017-08-20
  • 2012-02-17
  • 2016-01-28
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
相关资源
最近更新 更多