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
查看平均每个php-fpm的内存
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
通过命令查看服务器上一共开了多少的 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。