记录一次PHP项目报502的问题
来源:互联网 发布:阿里云 yum 404 编辑:程序博客网 时间:2024/05/16 14:53
问题描述
最近有台服务器偶尔会报502错误,虽然量不多,每天就几十个,但是也必须得找到原因,避免让小问题变成大问题。
排查过程
502错误的原因,一般是对用户访问请求的响应超时造成的,一开始以为是请求量太大,超过了服务器目前的负载,但是查看了zabbix监控,发现问题时段的负载、内存、IO都没有非常明显的变化,服务器并没有达到繁忙的状态;查看这个时段请求的并发数,也不高。
然后查看nginx错误日志,发现该时段有如下报错:
connect() to unix:/dev/shm/phpfpm.socket failed (11: Resource temporarily unavailable) while connecting to upstream
说明还是php-fpm进程不足导致的。
然后再观察问题时段的php-fpm进程数变化情况:
发现问题时段php-fpm的进程数确实有比较明显的变化,但是最高只到了75左右,并没有达到我们设置的pm.max_children的数值。
综上,结合502的特性,猜测:
是否是php-fpm子进程设置为dynamic模式,而我们的空闲进程数上限设置得比较低(目前设置的是35),然后当请求量增大时,创建子进程的速度跟不上请求增加的速度,进而导致部分请求无法得到响应,从而出现502?
验证猜想
为了验证上面的这个猜测,我在测试环境做了一些尝试,即将php-fpm的pm.start_servers和pm.max_spare_servers都设置得比较小,然后进行ab测试,观察php-fpm创建子进程的速度,发现果然和猜测的一样,是非常慢的。当请求数比较多时,会因为创建php-fpm子进程的速度太慢,出现502的情况。
解决方案
增大php-fpm的pm.start_servers和pm.max_spare_servers的数值(最关键的是pm.max_spare_servers这个配置),保证请求量增加时,能够有足够的进程来处理请求,不需要在短时间内创建过多进程。
- 记录一次PHP项目报502的问题
- 记录一次PHP项目报502的问题
- 记录一次PHP项目报502的问题
- 记录一次PHP项目报502的问题
- 一次处理项目中工作流问题的过程记录
- JAVA项目长遇见的报错或问题记录
- 记录一次.net项目的破解过程
- 一次项目易用性检查会议的记录
- 记录一次项目引用导致的StackOverflowError
- 记录一次webpack2的项目架构
- 一次SSM项目记录
- 记录一次数据库挂了的问题
- 记录一次定位死锁的问题
- 记录一次多线程死锁的问题
- 记录一次File.createNewFile()报错的解决方法
- 记录一次在虚拟机中运行android项目崩溃问题
- 记录一次问题
- 一次PHP代码上线遇到的问题
- tensorflow学习笔记(三十五):control flow
- Maya Calendar (POJ 1008)
- 冒泡排序法
- mysql——语句优化简介
- JSP页面 在标签中添加两个class属性
- 记录一次PHP项目报502的问题
- hashset
- MongDB下载地址 ,全部
- WebGIS开源解决方案之环境搭建(三)
- Ubuntu删除用户和卸载服务命令
- java自学日记
- linux学习
- Linux 常用命令
- Android Studio显示行数