记录一次nginx+php无法访问的问题排查

nginx+php服务无法访问的问题排查

思考问题:服务挂了(nginx、php-fpm),php-fpm&nginx服务需要重启。

第一反应:从负载上先摘除,正好有时间 就排查一下问题原因在重启服务吧。

排查步骤:

1、确定进程状态:

nginx:ps -ef |grep nginx

php-fpm:ps -ef |grep php-fpm

发现进程都正常,另外因为nginx 很少出问题,当时就怀疑php-fpm 挂了,但为什么挂呢?ping 一下ip没问题!

2、第一想法 看服务日志

先查看nginx error.log有无可用信息,然并没有。

第二步:查看php-fpm_error.log,没有发现可用信息。

3、磁盘&内存&cpu使用情况:

磁盘:df -h 磁盘未满。

内存:free -m 内存也还有1G左右。

top:好吧,CPU使用也是正常的。。。。。

ps:查看php-fpm内存使用、开启的进程数以及每个进程的内存限制

查看进程内存消耗明细前100的也没有发现异常,php-fpm在22M左右,使用指令:

ps auxw|head -1;ps auxw|sort -rn -k4|head -100

记录一次nginx+php无法访问的问题排查

查看平均每个php-fpm的内存

 ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

记录一次nginx+php无法访问的问题排查

通过命令查看服务器上一共开了多少的 php-cgi 进程

ps -fe |grep "php-fpm"|grep "pool"|wc -l

查看已经有多少个php-cgi进程用来处理请求

netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l

到这里。。。说实话 有点感觉麻烦了,从服务的日志和状态上都没看出常见问题......在毫无进展的前提下,我想就只有系统的程序崩贵日志了。

4、在毫无进展的前提下,用gdb如何调试PHP的Core

推荐:https://www.laruence.com/2011/06/23/2057.html

https://www.laruence.com/2008/12/31/647.html

https://www.laruence.com/2010/09/27/1754.html

 

https://www.vckai.com/shi-yong-gdb-diao-shi-php-core-dump

 

试一下。。。。无进展,咋办?怀疑难道是nginx 挂了?

5、好吧,为了排除php-fpm问题,就telnet ip 80吧,意外啊......竟然不通!

ping的通&进程正常,telnet 80 不通,难道是安全策略?和运维进行沟通,排除之。

接下来:

看nginx运行情况:ps -A | grep nginx

看端口:netstat -ntlp

再次查看进程:ps -ef|grep nginx

服务:service nginx status

呵呵呵!竟然都还正常。最后还是重启nginx 解决的。遗憾是能力&时间有限没能借此机会了解到nginx为什么会挂。

只是让运维新操作添加了《zabbix监控案例之Nginx监控》https://blog.z0ukun.com/?p=1472

反思:

应该先看下nginx 的访问日志的,绑定hosts调用接口看看。当发现php服务的接口不正常时,在确定一下静态资源的接口,如果php接口不正常,静态资源也不正常,直接定位网络&安全&nginx服务本身出的问题,解决办法直接reload nginx。

上一篇:Mac brew 启动和关闭php-fpm


下一篇:判断android文件是否加壳