8

JVMのメモリが不足したときにそれを再起動するように見える、JVM用のnagiosウォッチドッグを作成したいと思います。

現在、JVMをセットアップしてJMXを許可することはできましたが、OutOfMemory状態を検出して再起動する方法がわかりません。

 /check_jmx -U service:jmx:rmi:///jndi/rmi://127.0.0.1:1100/jmxrmi -O "java.lang:type=Memory" -A "HeapMemoryUsage" -K used -I HeapMemoryUsage -J used -vvvv
 JMX OK HeapMemoryUsage.used=957414288{committed=2415984640;init=2147483648;max=2863333376;used=957414288}

https://github.com/tcurdt/nagios-check-jmx

4

2 に答える 2

12

Java 1.4.2 以降を使用している場合、このオプションを使用すると、最初の OutOfMemeory 例外が発生したときにユーザー定義コマンドを実行できます: -XX:OnOutOfMemoryError="<cmd args>;<cmd args>"

それはあなたにいくつかのまともなオプションを与えるはずです. たとえば、nagios にパッシブ チェックを開始して、サーバーが再起動中であることを通知し、シェル スクリプトを開始して、誤った JVM を停止/開始することができます。

于 2012-07-25T18:42:36.457 に答える
1

JMXを使用してメモリ不足の状態を検出できるとは思いません。JVMが実際に寿命を迎えている場合、接続しようとすると、JMX接続自体がOOM例外をスローする可能性があります。

OOMの代わりにメモリ状態を検出します。システムの空きメモリが一定時間、ウォーターマークを下回ったときに警告します。また、サーブごとのメトリックファイルをダンプするために実行されるスレッドもあります。スレッドはすでに割り当てられているため、JVMがなくなった後でもシステムメモリ情報を確実にダンプできます。

ログに記録します:

// free memory
Runtime.getRuntime().freeMemory()
// current heap usage
Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()
于 2012-07-25T17:17:06.663 に答える