CentOS 5を実行しているサーバーの1つにMuninとMonitをインストールしました。httpdプロセスが再起動されたときを除いて、すべてが正常に機能し、情報をログに記録して報告します。 Monitは、メモリ使用量が2.5GBに達した場合にhttpdを再起動するように設定しています。これが発生した場合、正常に再起動しますが、Monitは新しいプロセスを取得しません。
Httpdサービスが存在しないという通知が表示され、次にhttpdの起動に失敗したという通知が表示され、最後にhttpdサービスがタイムアウトして監視されなくなるという通知が表示されます。
Httpd service ISが正常に再起動されるため、これらのレポートが表示される理由がわかりません。ログを確認しましたが、再起動時に問題はありません。
おそらく、monitにhttpdを再起動、数秒待ってからmonitも再起動というスクリプトを実行させます。
Monitが強制終了されたhttpdプロセスに関連付けられた特定のプロセスIDに何らかの形でロックされている可能性があります。これにより、新しいプロセスを正しく検出できるようになります。
システムが2.5Gbの使用ポイントに達したときにシステムにどれだけの空きメモリがあるかはわかりませんが、その量が少なくなりすぎると(おそらく再起動中に?)、Linuxはプロセスをランダムに強制終了して完全なクラッシュを回避します。 oomkillerがmonitの機能に不可欠な何かを殺しているのではないかと推測しています。
この場合、再起動のしきい値を下げる 2.5Gbから2.0Gbに下げるか、ボックス内のメモリの量を増やすことをお勧めします。
競合状態の問題である可能性があります。 Monitの再起動により、「httpdstop」が生成されてから「httpdstart」が生成されます。これはアトミック操作ではありません。 「httpdstop」と「httpdstart」の間で命令のインターリーブが発生します。
ついに「rm-rfpidfile」ができるようになりました。 Monitはhttpdプロセスを取得しません。
これは、Monitがボールであるためです。サービスの実際の状態を検出するのに常に問題がありました。理由はわかりませんが、しばらく前にmonitをあきらめて、monitがやろうとしたことを行う別の方法に切り替えました。大きな成功と、少し以上の幸せがありました。