开发了一个新项目,开发环境完全正常,部署至测试环境时,直接报502,换了几台测试机器,有正常的也有依然报502的……
环境
开发、测试、生产环境均是CentOS 6.8的系统,Web环境是nginx+PHP7.2
现象
1.新项目页面直接显示502错误,其它项目均正常,项目外打印phpinfo正常
2.查看nginx日志多数都是
[error] 6048#6048: *2166 recv() failed (104: Connection reset by peer) while reading response header from upstream
排查
1.查找网上相关资料,修改php.ini中的和php-fpm.conf相关配置,包括max_execution_time、pm.max_children、pm.max_requests等网上提供的各种参数,仍然不起作用
2.使用strace -p指令,依然无法直接定位,监测到对应的php-fpm子进程接收到request请求后,未能完全解析完,close掉了
解决
由于初次使用strace指令,加之对此指令了解不多,并没能从底层的请求解析层面定位问题,而是通过正常与不正常环境的多次对比及项目代码里的断点调试最终推敲到问题所在:对应的zookeeper扩展版本未按部署手册中的版本号部署,而是测试部门的同事使用了新的版本号,最主要的是新版本竟然是个alpha版
建议
部署新项目环境一定要保持环境及扩展版本一致,以免耽搁过多的宝贵时间,同时对也会给自己的工作带来不利影响。笔者反复排查定位这个问题的根源,前后竟浪费掉了三天时间,好在问题源头没出在我们研发组身上,大家都懂得……