2

4MB/秒の持続的なネットワーク転送の40〜50分ごとに停止するサードパーティのネットワークファイル転送Javaプログラム用に、Ubuntu LTSにウォッチドッグを作成する必要があります。

その Java プログラムを変更することはできませんが、upstart を介して生成されます。

私の現在のウォッチドッグは忙しい待機中です:

while monitoring_enabled:
    begin_time = now()
    # query ps and /proc to see if it's there
    end_time = now()
    diff_time = end_time - begin_time
    if not diff_time > sleep_time:
        sleep(sleep_time - diff_time)

「忙しい待機は悪い」ので、これは最大10%のCPUを消費しているため、これを解決するより良い方法があるかどうか疑問に思っていました:

  1. ポーリングの代わりに通知/イベント処理を行います。プロセスが終了したときに通知/イベントが発生することを暗示しているわけではありませんが、Java プログラムが停止したことを OS が判断できるかどうかを尋ねていることに注意してください。

  2. プロセスがダウンした場合に Java プログラムを再起動するように、Java プログラムを生成する upstart スクリプトを変更しますか?

  3. より良い解決策はありますか?ファイル システム イベントを監視するための Python API ライブラリやシェル ユーティリティのようなものかもしれませんが、Linux プロセスの場合は

4

2 に答える 2

2

スーパーバイザー- Python、プロセスの生成と制御、イベント通知、xml-rpc API、優れたドキュメント、優れたレビュー

于 2012-08-15T20:48:23.407 に答える
0

while ループでプログラムを実行する bash スクリプトを作成します。

#!/bin/bash
while true; do 
    java -jar offendingProgram.jar
done

次に、開始した場所からスクリプトを bg します。

于 2012-06-17T18:29:59.277 に答える