咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
最近有一台Linux服务器间隙的报错,Apache每过一段时间就会假死,web环境是LNMPA。
检查Apache日志error_log,发现错误如下:
[Thu Jul 28 15:21:45 2016] [notice] child pid 16842 exit signal Segmentation fault (11)
[Thu Jul 28 15:22:29 2016] [notice] child pid 16839 exit signal Segmentation fault (11)
[Thu Jul 28 15:22:40 2016] [notice] child pid 16994 exit signal Segmentation fault (11)
[Thu Jul 28 15:24:28 2016] [notice] child pid 17169 exit signal Segmentation fault (11)
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
这个时候,nginx是正常的,静态资源可以访问,绝大多数php页面也是可以访问的,但是一旦php页面需要调用底层命令的时候,就报错了,比如Laravel的生成配置缓存命令:
$exitCode1 = Artisan::call('config:cache', []);//重新生成配置缓存
$exitCode2 = Artisan::call('route:cache', []);//重新生成路由缓存
$exitCode3 = Artisan::call('optimize', []);//生成编译文件
此时Apache无法正常执行php页面。
网上搜搜,发现了stack overflow上的一篇POST: http://www.landui.com/questions/2247977/what-does-zend-mm-heap-corrupted-mean,里面提供了一个思路,导致这个问题的原因在于 opcache,只要把 opcache的cli方式关闭就可以了,打开php.ini:
opcache.enable_cli=0