スーパーバイザー (http://supervisord.org/) を使用して、かなり標準的な PHP スクリプトをデーモン化しています。スクリプトは次のような構造になっています。
while (1) {
// Do a SQL select
// for any matching rows, do something
// if I have been running for longer than 60 mins, exit
}
今日、このスクリプト (かなり安定しています) がハングしました。これは、supervisord にプロセスを再起動するように警告するようなクラッシュ (つまり、SIGHUP または SIGTERM シグナルの発行) はしませんでした。処理中にエラーは発生しませんでした。これは、スクリプトによってキャッチされるか、少なくとも致命的なエラーをトリガーして終了した可能性があります。これらの「キャッチ可能な」シナリオの代わりに、それはただそこに座っていました. PHP スクリプトはメモリの観点からリークが多く、実行時間が長い場合は再起動するのが適切であることが一般的に認められているため、supervisorctl フックを介してスクリプトを再起動するために 1 時間ごとに実行する cron ジョブをセットアップしています。その再起動後、スクリプトは正常に動作を再開しました。
私の質問: このスクリプトがハングしたことをどのように検出できますか? なんらかの方法でその状態を警告されない限り、なぜハングしたのかというこの問題の診断やトラブルシューティングを開始することさえできません。これに対するソフトウェア ソリューション、または自分でソリューションを作成するためのアプローチ (PHP、Python、perl、またはシェルのいずれか) を探しています。
スクリプトは PHP 5.2.6 で書かれており、最新の RHEL 5 サーバーで実行されます。
より素晴らしいソリューションに役立つ場合は、追加情報を共有できるかどうかお知らせください。
ありがとうございました!
シャヒーブ R.