故事的起点
售后小姑娘反馈某用户线上产品突然无法使用,2021年的老项目了,因为用户数较少,所以前端-后端开发都跑路了。啥,为啥我没跑路?脸皮厚啊。言归正传,我们一起梳理下项目,定位问题。
流程图
项目的业务流程图如下:
问题来了
用户反馈的问题实际上就是红框内容没有返回
问题分析
线上分析
通过nginx常规日志看到错误码499。难道是本地服务还没结束就被杀死了?咨询转发-服务器端开发,确实添加了超时机制。那把超时时间改长一些是不是就可以愉快的终结了呢?嗯,还是先看看慢在哪里吧。
nginx
nginx侧当时是由本人定制的nginx+uploadmodule+简单的session校验。是不是session校验出问题了呢?替换nginx为debug版,并打印debug日志,如下:
从以上日志可以看到nginx-cgi已输出到php-cgi进程,且整体耗时正常,暂时排除nginx的问题。
php
那一定是php-cgi的问题了吧!怎么定位呢?还好,有strace。将php-fpm工作进程改为1个,strace…
故事的终局
通过strace发现,php脚本中有一个阻塞操作!为什么测试同学没有发现呢?特定环境才会出现!OK,完结撒花。
花絮
nginx
再画下nginx-cgi flow吧