Php

PHP5-FPM 的 I/O 錯誤,ptrace(PEEKDATA) 失敗

  • July 3, 2016

我得到了很多這些:

[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 達到 max children(至少我認為是這種情況)時,它會停止“工作”……現在我知道我可以增加 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

我認為這些腳本這麼慢是不正常的。你建議玩 max_execution_time 嗎?

看來您已request_slowlog_timeout啟用。這通常需要超過 N 秒的任何請求,記錄它花費了很長時間,然後記錄腳本的堆棧跟踪,這樣你就可以看到它在做什麼花了這麼長時間。

在您的情況下,堆棧跟踪(以確定腳本正在做什麼)失敗。如果您的程序用完了,那是因為:

  1. php-fpm停止程序追踪後,程序無法恢復,因為追踪它的錯誤
  2. 該過程正在恢復,但會繼續永遠執行。

我的第一個猜測是禁用 request_slowlog_timeout。由於它不能正常工作,它可能弊大於利。如果這不能解決程序耗盡的問題,那麼將 php.ini 設置max_execution_time為肯定會殺死腳本的內容。

引用自:https://serverfault.com/questions/406532