web-dev-qa-db-ja.com

PHP5-FPMでのI / Oエラー、ptrace(PEEKDATA)が失敗しました

私はこれらの多くを得ました:

[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(現在は9に設定)を増やすことができることはわかっていますが、phpが「死ぬ」のを防ぐ方法はありますか?

1コアで512MBの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で遊ぶことをお勧めしますか?

2

あなたが持っているようです request_slowlog_timeout 有効。これは通常、N秒よりも長いリクエストを受け取り、時間がかかったことをログに記録してから、スクリプトのスタックトレースをログに記録して、時間がかかっていたことを確認できるようにします。

あなたの場合、(スクリプトが何をしているかを判断するための)スタックトレースが失敗しています。プロセスが不足している場合は、次のいずれかの理由があります。

  1. Php-fpmがプロセスのトレースを停止した後、トレースエラーが原因でプロセスが再開できません
  2. プロセスは再開されていますが、永久に実行され続けます。

私の最初の推測は、request_slowlog_timeoutを無効にすることです。正しく機能していないため、良いことよりも害が大きいかもしれません。これでプロセスが不足する問題が解決しない場合は、php.ini max_execution_time確かにスクリプトを殺す何かに。

6
DerfK

ptrace(PEEKDATA)failedのより有効な説明はこれのようです-

...マスターが遅い実行を決定しているとき、ワーカーは自由に移動できます。トレースを停止すると、その実行が完了し、別の要求を処理している段階にある可能性があるため、トレーサーは失敗する可能性があり、さらに悪いことに、無関係な実行のスタックをダンプします。

from FPM Slowlog sucks これは混乱全体をより詳細に説明します。

1
Shrenik