2

私はphpで非常に長いタスクを実行しています。これは Web サイトのクローラーであり、サーバーの過負荷を防ぐために各ページで 5 秒間スリープ状態にする必要があります。スクリプトは次で始まります。

ignore_user_abort(1);
session_write_close();
ob_end_clean();
while (@ob_end_flush());
set_time_limit(0);
ini_set('max_execution_time',0);

数時間後 (3 ~ 7 時間)、スクリプトは目に見える理由もなく終了します。確認しました

  • Apache エラー ログ (なし)
  • php_errors.log (何もない)
  • エラーの出力 (10 578 467b のデバッグ出力、エラーなし)
  • メモリ消費量 (安定、memory_get_usage(true)5 秒ごとにチェックして約 3M、制限を 512M に設定)

同様の理由でwgetとchromeを使用してチェックしていたため、ブラウザではありません。出力は2〜3秒ごとにブラウザに送信されるため、それが問題だとは思いません+ユーザーの中止を無視します。

問題を見つけるために確認できる他の場所はありますか?

4

1 に答える 1

0

Apache ではなく、スクリプトの残りの部分に問題があると思います。

このような軽量プロファイラーでregister_tick_functionを使用してアプリケーションをプロファイリングし、メモリ使用量をログに記録してみてください。

于 2012-08-30T11:03:03.297 に答える