收集到的信息包括:
- 如下接口返回超时错误:Nginx 504 Gateway Time-out?
重启php-nginx和php-fpm之后不到1分钟又挂了。排查数据库连接数增大出现的故障。
- 对应的数据库rds6~joq4的当前总连接数指标在9:15的时候陡升:
- php-fpm的log显示:
[25-Mar-2019 10:33:22] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 98 total children
[25-Mar-2019 10:33:23] WARNING: [pool www] server reached pm.max_children setting (100), consider raising it
原因分析
因为当天访问量增加的幅度并不大,但是由于累计的访问量正好达到一个php-fpm配置的pm.max_children阀值(100),造成php-fpm无响应。服务器连接失败。
- 配置负载均衡
按照1个进程最大消耗30M计算,服务器8G内存 (1024*8)/30=274个进程
把其他程序运行消耗算进去的话,最终得出结论,把pm.max_spare_servers设置为处理200个为峰值比较妥当。
采取措施
- 编辑配置文件/usr/local/php/etc/php-fpm.conf,调校如下参数:
pm = dynamic
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers =200