网站最近经常出现这样一种情况:一会出现“502 Bad Gateway nginx",一会又恢复正常,很郁闷。
结果我查看了php-fpm.log日志,报错如下:
- [06-Dec-2017 15:08:32] ERROR: failed to ptrace(PEEKDATA) pid 15951: Input/output error (5)
- [06-Dec-2017 15:08:32] NOTICE: finished trace of 15951
- [06-Dec-2017 15:08:36] ERROR: failed to ptrace(ATTACH) child 15807: Operation not permitted (1)
- [06-Dec-2017 15:08:36] WARNING: [pool www] child 15807, script '/home/wwwroot/default/TTTTT_GAME/index.php' (request: "GET /TTTTT_GAME/index.php") executing too slow (1.006536 sec), logging
- [06-Dec-2017 15:08:46] WARNING: [pool www] child 15937, script '/home/wwwroot/default/TTTTT_GAME/index.php' (request: "GET /TTTTT_GAME/index.php") executing too slow (1.022103 sec), logging
- [06-Dec-2017 15:08:46] NOTICE: child 15937 stopped for tracing
- [06-Dec-2017 15:08:46] NOTICE: about to trace 15937
- [06-Dec-2017 15:08:46] ERROR: failed to ptrace(PEEKDATA) pid 15937: Input/output error (5)
- [06-Dec-2017 15:08:46] NOTICE: finished trace of 15937
- [06-Dec-2017 15:08:47] WARNING: [pool www] child 15978, script '/home/wwwroot/default/TTTTT_GAME/index.php' (request: "GET /TTTTT_GAME/index.php") executing too slow (1.052748 sec), logging
- [06-Dec-2017 15:08:47] NOTICE: child 15978 stopped for tracing
- [06-Dec-2017 15:08:47] NOTICE: about to trace 15978
- [06-Dec-2017 15:08:47] ERROR: failed to ptrace(PEEKDATA) pid 15978: Input/output error (5)
- [06-Dec-2017 15:08:47] NOTICE: finished trace of 15978
- [06-Dec-2017 15:08:48] WARNING: [pool www] child 15950, script '/home/wwwroot/default/TTTTT_GAME/index.php' (request: "GET /TTTTT_GAME/index.php") executing too slow (1.143735 sec), logging
- [06-Dec-2017 15:08:48] NOTICE: child 15950 stopped for tracing
- [06-Dec-2017 15:08:48] NOTICE: about to trace 15950
- [06-Dec-2017 15:08:48] ERROR: failed to ptrace(PEEKDATA) pid 15950: Input/output error (5)
- [06-Dec-2017 15:08:48] NOTICE: finished trace of 15950
- [06-Dec-2017 15:08:55] ERROR: failed to ptrace(ATTACH) child 15807: Operation not permitted (1)
- [06-Dec-2017 15:08:55] WARNING: [pool www] child 15807, script '/home/wwwroot/default/TTTTT_GAME/index.php' (request: "GET /TTTTT_GAME/index.php") executing too slow (1.101971 sec), logging
- [06-Dec-2017 15:09:01] WARNING: [pool www] server reached pm.max_children setting (40), consider raising it
- [06-Dec-2017 15:09:12] WARNING: [pool www] child 15992, script '/home/wwwroot/default/TTTTT_GAME/index.php' (request: "GET /TTTTT_GAME/index.php") executing too slow (1.313628 sec), logging
- [06-Dec-2017 15:09:12] NOTICE: child 15992 stopped for tracing
- [06-Dec-2017 15:09:12] NOTICE: about to trace 15992
为什么会出现这个错误?
因为你有request_slowlog_timeout启用。这通常需要超过N秒的任何请求,记录它需要很长时间,然后记录脚本的堆栈跟踪,以便您可以看到正在做的事情花了那么长时间。
在你的情况下,堆栈跟踪(以确定脚本正在做什么)失败。
如果您的流程用完了,那是因为:在php-fpm停止进程追踪它之后,由于跟踪错误,进程无法恢复这个过程正在恢复,但是会一直持续下去。
以下文章有说明为什么会出现“502 Bad gateway”和“504 Gateway Time-out”?
https://www.fujieace.com/php/pm-max_children-2.html
解决办法:
1、禁止slowlog
- vim php-fpm.conf
- ;request_slowlog_timeout = 10s
- ;slowlog = /usr/local/log/php-fpm/ckl-slow.log
既然这样做不对,那可能是弊大于利。如果这不能解决流程用完的问题,请继续第二步;
2、修改最大执行时间
- vim php.ini
- max_execution_time = 60
3、重启进程
- /etc/init.d/php-fpm reload
等待一段时间,看是否一切正常?
4、如果还不正常,只有服务器硬件升级。
推荐文章:
php-fpm.conf配置性能优化详解:https://www.fujieace.com/php/php-fpm-2.html