好久没写了,记录个php坑。

    倒腾zabbix的php时,装了一个screw-plus的php加密插件,却突然发现web页面打不开了,具体表现是web页面无响应一直在转,等很久之后报无法连接,此时开浏览器的调试模式,只能看到连接处于stalled状态,然而80端口却能正常连接,登录后台看apache的error.log及系统的syslog都无明显报错,偶尔会在重启时出现

 

  ”child pid 6705 exit signal Segmentation fault (11)“

     百度谷歌乱查了一通,并无解决问题的头绪,看到有说php发生变化的问题,于是把插件卸载,找回原版php,重启了apache,发现还是不行,非常头疼。

      然后想起来是php是不是真的不行呢,于是手写了

<?php
phpinfo();
?>

     页面正常显示了,这说明php代码执行应该是没问题的,应该是执行zabbix的php中间出了问题,于是开启了人肉php调试模式,采用

print_r($var);
exit;

一步一步断点调试。

    最终发现卡在initdb那里,手动mysql连接也连接不上,发现原来是数据库出了问题,然后想起数据库是放在nfs共享目录中,果然nfs挂了,nfs起来,重启数据库,文件已经损坏无法修复,但此时页面已经能显示报错了

Database error

  • Error connecting to database: No such file or directory

Retry

    到此,原因是找到了,mysql的数据文件目录断开,可能socket还在,php连接数据库超时,但zabbix没有记录报错,导致页面一直加载,到http连接最后断开。