记录一次非专业php项目线上问题排查
事情的经过是这样子的:疫情期间失业后,我由于拖延症一直未加入新公司,刚好朋友有个项目需要人手,我就接手了一部分工作。但开工不到一个月,项目上线后客户反应接口不稳定,有的时候能出数据正常有的时候网页加载不出数据一直报错,希望我们尽快处理。
我是java开发,大前端也都略通一点,所以做得是前端与测试运维工作,但php还真是没有参与过,虽然线上问题由于是晚上发生且实际开发人员由于找的外包不能提供技术支持,但想着我也算干了3年的后端,还是能看看问题的,于是我在收到消息的晚上9点就开始排查了。
项目后端采用php+redis+nginx+mysql,用户反应项目接口时有数据时而无数据,刚开始觉得重启下服务应该没啥问题,但重启nginx,重启php未能解决问题
折腾了2个小时,终于发现问题并暂时解决了,记录一下。
1 获取当前php-fpm.conf配置文件位置
首先查看日志配置文件,由于有一阵子没看代码,不记得日志配置在哪,只记得文件名,在当前用户任意目录运行命令
locate php-fpm.conf
得到该文件的位置。
或者通过执行 ps -ef |grep php
可以得到当前的php-fpm进程数以及php-fpm.conf配置文件位置
找到php所在的进程id所保存的位置,可在php-fpm.conf查看
php-fpm 启动:
# /usr/local/php/为php-fpm的安装地址
/usr/local/php/sbin/php-fpm
php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid
或者:pkill php-fpm
查看是否启动成功:
netstat -lnt | grep 9000
或者使用如下命令,查看是否9000端口被php-fpm占用:
netstat -tunpl | grep 9000
通过查看php-fpm.conf 可知 日志存放位置,进入日志文件php-fpm.log 文件 查看看到WARNNING提示
server reached pm.max_children setting (10), consider raising it
意思是php-fpm并发进程满了,修改php-fpm.conf的配置信息。
2 修改php-fpm.conf文件
//最大子进程 (默认是5个)
pm.max_children = 261
//php-fpm启动起始进程数
pm.start_servers = 8
//php-fpm的最小空闲进程数
pm.min_spare_servers = 10
//php-fpm的最大空闲进程数
pm.max_spare_servers = 512
//所有子进程重启时间
pm.max_requests = 500
后续观察php-fpm日志,未发现类似日志出现,且接口数据返回不卡顿正常显示。