我有很多这样的:
[NOTICE] child 19214 stopped for tracing [NOTICE] about to trace 19214 [ERROR] ptrace(PEEKDATA) failed: Input/output error (5) [NOTICE] finished trace of 19214 [WARNING] [pool www] child 19208, script 'blahblah.php' executing too slow (30.041419 sec), logging [NOTICE] child 19208 stopped for tracing [NOTICE] about to trace 19208 [ERROR] ptrace(PEEKDATA) failed: Input/output error (5) [NOTICE] finished trace of 19208 [WARNING] [pool www] child 19218, script 'blahblah.php' executing too slow (30.035029 sec), logging
当php达到最大的孩子(至less我认为是这样的),它停止“工作”…现在我知道我可以增加max_children(目前设置为9),但有一种方法来阻止从“死”的PHP?
我在1个核心和512 MB RAM(PHP5-FPM 5.4.4 + APC 3.1.10)的VPS上。
禁用慢日志后,我现在得到:
WARNING: [pool www] child 1684 exited on signal 15 (SIGTERM) after 77.802376 seconds from start NOTICE: [pool www] child 1694 started WARNING: [pool www] child 1377, script 'blahblah.php' (request: "GET /blahblah.php") execution timed out (38.291440 sec), terminating WARNING: [pool www] child 1377 exited on signal 15 (SIGTERM) after 2750.295279 seconds from start NOTICE: [pool www] child 1696 started WARNING: [pool www] child 1722, script 'blahblah.php' (request: "POST /blahblah.php") execution timed out (39.653910 sec), terminating WARNING: [pool www] child 1722 exited on signal 15 (SIGTERM) after 793.953090 seconds from start
我认为这些脚本太慢是不正常的。你build议玩max_execution_time?
看起来你有request_slowlog_timeout启用。 这通常需要超过N秒的任何请求,logging它需要很长时间,然后logging脚本的堆栈跟踪,以便您可以看到正在做的事情花了那么长时间。
在你的情况下,堆栈跟踪(以确定脚本正在做什么)失败。 如果您的stream程用完了,那是因为:
我的第一个猜测是禁用request_slowlog_timeout。 既然这样做不对,那可能是弊大于利。 如果这不能解决stream程用完的问题,那么将php.ini max_execution_time设置为将会杀死脚本的东西。
对ptrace(PEEKDATA)失败的更有效的解释似乎是这样 –
当工作人员确定执行速度缓慢时,工人可以自由行走。 当停止追踪时,可能已经完成了执行,并处于任何阶段为另一个请求服务,所以追踪者有机会失败或更糟,抛出一堆不相干的执行。
来自FPM慢速日志很糟糕 ,更详细地解释了整个混乱。