一つの可能な説明を微調整する必要があります。それは、あなたがランダムなダイ・オフを見ている理由です。ガベージコレクタがオンになると、ルートバッファが満杯になるたびにサイクル探索アルゴリズムが実行されます。
PHP manual状態:
オンとオフのメカニズムを有効にすると、サイクルコレクションを自分で開始する能力の理論的根拠、あなたのアプリケーションのいくつかの部分は非常に時間に敏感かもしれないということです。
gc_disable
を使用してPHPガベージコレクタを無効にすることができます。このマニュアルでは、バッファを解放する前にgc_collect_cycles
に電話することを推奨しています。
もう1つの説明はコードそのものです。 8時間のスクリプトは長いスクリプトで、複雑な場合は簡単にスクリプトが終了する原因となります。私は今あなたのトラブルシューティングのために、すべてerror_reporting(-1);
を使用して報告するように間違いなくエラー報告をする必要があります。
また、スクリプトが他のサービス、たとえばデータベースなどと通信している場合は、問題の可能性があります。データベースサーバーのメモリが不足またはタイムアウトした場合、スクリプトがハングアップして停止する可能性があります。この場合、データベースへの接続を分割し、スクリプト中に特定の時間間隔で接続/切断することで、その接続を最新に保つことができます。コミュニケーションしている他のサービスにも同じ考え方を適用できます。
テスト目的でのみ、スクリプトが意図的に、成功した各クエリをログファイルに書き込んで、クエリが存在するときとクエリが終了したときのタイムスタンプを必ず含めてください。エラーは発生しないかもしれませんが、特定の問題の問合せがあるかどうか、または問合せが通常より長く停止しているかどうかを判断するのに役立ちます。また、あなたのMySQL接続が有効であることを確認し、それを知らせる何かをプリントアウトすることもできます。
例ログファイル:
[START 2011/01/21 13:12:23] MySQL Connection: TRUE [END 2011/01/21 13:12:28] Query took 5s
[START 2011/01/21 13:12:28] MySQL Connection: TRUE [END 2011/01/21 13:12:37] Query took 9s
[START 2011/01/21 13:12:39] MySQL Connection: TRUE [END 2011/01/21 13:12:51] Query took 12s
を死ぬときに実行されているディレクトリにコアダンプファイル(core.xxxx)を見つけるかどうかを確認ログファイルを含める? – acm
あなたはどのプラットフォームでスクリプトを実行していますか? win/linux? –
@andre:はい、 'error_log( 'test')'はそれらのログファイルに出力しますが、スクリプトがなくなるとエラーは発生しません。 – HyderA