php报错 "zend_mm_heap corrupted"

一:环境介绍
阿里云 [machao@gksn]$ cat
/etc/redhat-release CentOS Linux release 7.0.1406 (Core)
本地有测试环境和线上环境,线上环境放在svn
[machao@iZ233xdnwmfZ ~]$ php -v
PHP 5.6.20 (cli) (built: Apr  9 2016 20:40:37)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies


参考文档:https://stackoverflow.com/questions/2247977/what-does-zend-mm-heap-corrupted-mean

二:报错内容

网站的一个功能突然不能用了,点击进去显示 ‘502 Bad Gateway'   但是测试环境正常

当时第一反应以为nginx的问题,网络原因,看了下nginx状态,刷新游览器页面还是不行。又想到网站的其他页面都是好好的,然后检查php-fpm.log的错误文件

tail -f /usr/local/php56/var/log/php-fpm.log

[16-May-2018 11:30:28] WARNING: [pool www] child 32494 said into stderr: "zend_mm_heap corrupted"
[16-May-2018 11:30:28] WARNING: [pool www] child 32494 exited with code 1 after 534.670302 seconds from start
[16-May-2018 11:30:32] WARNING: [pool www] child 32521, script '/web/zwbi/admin/public/index.php' (request: "GET /index.php") executing too slow (5.745961 sec), logging

三:解决方法

1.内存问题

打开php.ini文件找到下面两行 增大output_buffering 的值    或者 关闭此选项或者在命令行执行export USE_ZEND_ALLOC=0  ps:不用USE_ZEND_ALLOC性能会急剧下降,这是php自带的内存管理机制

 vim /usr/local/php56/etc/php.ini

output_buffering = On
output_buffering = 25600

重启php-fpm

sudo systemctl restart  /usr/local/php56/sbin/php-fpm
2.怀疑是权限的问题

chown -R www.www filename && chmod 777 filename

可是还是502

3.检查nginx错误日志和php-fpm.log日志

[06-Mar-2018 15:54:57] WARNING: [pool www] child 30396 said into stderr: "zend_mm_heap corrupted"
[06-Mar-2018 15:54:57] WARNING: [pool www] child 30396 exited with code 1 after 239.805753 seconds from start
  • 1
  • 2

百度,谷歌查询了一些链接,“”确定是opcache模块的问题“,”当时觉得基本可以解决了。但是我把opcache整个模块注释掉还是没用。链接贴在下面,没有解决我的问题,可能对朋友们会有帮助。

https://stackoverflow.com/questions/2247977/what-does-zend-mm-heap-corrupted-mean 
https://github.com/websharks/comet-cache/issues/705

4.觉得是一些依赖组件的问题,遂把测试环境的composer包等更新到正式环境,测试仍然失败。测试失败后还原组件(做这些操作一定要记得备份,随时还原)。

5.到这里和开发产生分歧了。我觉得是代码运行可能有问题,比如bug或者关联的某文件权限。开发觉得是我环境的问题。说干就干,一次性设置正式环境所有文件的权限。

sudo chown -R www.www /web/xxx

到了这里,问题依然没有解决

6.代码问题

开发回退之前代码版本,问题解决

 

7:注释:

1.线上代码不要放在SVN,会有很多坑。以前的运维把很多项目都放在线上,导致出了很多坑。令我深恶痛绝。 
(1)比如文件权限,svn更新文件以后,文件属主和属组会变成root。访问就会失败。 
(2)多一层SVN客户端又多了造成各种文件锁的情况

posted @ 2018-05-16 14:43  爱夜  阅读(1621)  评论(0编辑  收藏  举报