一:环境介绍
阿里云 [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客户端又多了造成各种文件锁的情况