记:接口报错的排错以及解决过程
前端页面正常渲染,接口出现错误返回,接口采用thinkphp5,前后端分离。
非专业运维工程师,这里记录一下此次异常的(紧急)处理过程,供今后进一步学习借鉴。
1.首先查看nginx报错日志以及php报错日志,项目代码未改动,大致定位到php-fpm配置出现问题,
日记记录报错信息如下:
upstream timed out (110: Connection timed out) while reading response header from upstream, client:
106.14.xxxx.xx, server: api.xxx.cn, request: "POST /v1/Relationproduct/index HTTP/1.1", upstream:
"fastcgi://127.0.0.1:9000"
【upstream 超时,也就是说接口响应超时】
2.查看内存使用情况:free -m
可用内存 100M左右
3.查看内存占用情况:
ps auxw|head -1;ps auxw|sort -rn -k4|head -4
mysql占用:30%-40%
php-fpm: 单个线程占用0.3%
当前php-fpm 使用进程数:7
4.尝试重启php-fpm,查看进程数回复到5,程序恢复正常,跑一段时间后,php-fpm进程数增加
到7问题再次出现。
5.猜测为php-fpm配置可用进程数过少,但考虑可用内存,于是改变最大可用进程数为 10(原5)
原 php-fpm.conf :
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 2
pm.max_spare_servers = 3
request_terminate_timeout = 100
第一次修改后:
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 8
request_terminate_timeout = 100
修改配置后重启,项目稳定一段时间后,php再次出现问题
由于这个项目接口只部署了一台服务器,当前故障时段为流量高峰,未解决问题,第二次修改后,考虑增加服务器内存,后续再做优化。
pm.max_children = 40
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 30
重启阿里云实例,并重启nginx以及php,配置生效,项目恢复正常。