PHP-FPM 故障重现与排除及开启php-debug日志的方法

应用运维

起因

之前在网上看到了这个报错,对此很感兴趣,于是决定学习一下这个点,报错如下

思路

当我们遇到问题是先确认故障的程序和实例是那个,nginx返回值为502badgartway,php-fpm不正常,重启php-fpm进程无效果,检查端口,发现端口没有启动寻找报错只能通过dmesg 查询至如下(why?点我知晓):

php-fpm.conf 配置有两个组:[global ][www]

当配置在[global]组中时,catch_workers_output无法生效并且无法正常启动运行php-fpm

patch–文件设置

直接扒日志无需在系统输出中寻找报错的方法

nginx与apache不一样,由于在apache中一般使用modphp调用的模式而非fastcgi可以直接指定php的错误日志,那样在php执行中的错误信息
就直接输入到php的错误日志中,可以方便查询。在nginx中事情就变成另一回事了:nginx只对页面的访问做access记录日志。不会有php的error log
信息。nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里 也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出直接把他们重定向到/dev/null, 所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。 所以我们要进行如下的设置就能查看到nginx下php-fpm不记录php错误日志的方法:
1.修改php-fpm.conf中的配置,如果没有请增加:

 

2.修改php.ini中配置没有则增加

3.重启php-fpm 当PHP执行错误时就能看到错误日志在”/usr/local/lnmp/php/var/log/php_error_log”中了

 

如果出现:

那请在第一步的时候认真将配置写入相对应的组中不然就出现上面的:ERROR: [/usr/local/php/etc/php-fpm.conf:5] unknown entrycatch_workers_output

总结

1、当系统实例出现问题是先确认报错码和日志,对服务要检测端口。

2、服务的配置文件,要注意参数不要放错组、模块,如php、mysql的组,nginx的server、标签模块

3、学习运维有余力要分析具体原因,会重现故障,并且善于总结

4、学会不断学习,比如本次添加的直接输出php日志的方法

 

继续阅读