zend_mm_heap corrupted 使用opcache出状况

生产问题一直有,看起来像是内存满了,导致无法请求

情况:

1.机器集群用的是容器搭建的 

2.请求出现一直502,重启过php-fpm还会出现

3.错误日志配置打开

当然不能直接关闭opcache,你会发现没有缓存内存飚高

打开错误日志,日志就会在/var/log/php-fpm/error.log出现

vi /etc/php-fpm.d/www8002.conf # 因应你要改哪一组来选不同的conf文件 

最后加一行:catch_workers_output = yes 

php5.6一直报zend_mm_heap corrupted with standard PHP 5.6: locating the cause和“zend_mm_heap corrupted”看起来像内存爆了,翻了一圈说是opcache的问题那就试试把他禁用吧,在php.ini中修改配置并重启php-fpm

查看php error log

[root@ip php-fpm]# grep zend error.log | tail -n 3
[01-Jun-2021 00:21:01] WARNING: [pool www8002] child 20812 said into stderr: "zend_mm_heap corrupted"
[01-Jun-2021 00:27:49] WARNING: [pool www8002] child 32582 said into stderr: "zend_mm_heap corrupted"
[01-Jun-2021 00:28:06] WARNING: [pool www8002] child 339 said into stderr: "zend_mm_heap corrupted"

cat php.ini | grep "opcache"
1. /etc/php.d/opcache.ini 改 "opcache.enable=0"
2. systemctl restart php-fpm

重点:当然不能直接关闭opcache,你会发现没有缓存内存飚高,所以不能直接关闭opcache,开始调优opcache吧

; 开关打开
opcache.enable=1

; 可用内存, 酌情而定, 单位 megabytes
opcache.memory_consumption=256

; 最大缓存的文件数目, 命中率不到 100% 的话, 可以试着提高这个值
opcache.max_accelerated_files=5000

; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 单位为秒
opcache.revalidate_freq=240

; interned string 的内存大小, 也可调
opcache.interned_strings_buffer=8   

; 是否快速关闭, 打开后在PHP Request Shutdown的时候回收内存的速度会提高
opcache.fast_shutdown=1

; 不保存文件/函数的注释
opcache.save_comments=0

参考链接:1.https://stackoverflow.com/questions/2247977/what-does-zend-mm-heap-corrupted-mean

2.https://stackoverflow.com/questions/50769286/zend-mm-heap-corrupted-with-standard-php-5-6-locating-the-cause

本文来着大海技术博客:http://www.ypyunedu.com/article/168

猜你喜欢

转载自blog.csdn.net/qq_27229113/article/details/117433419
今日推荐