Metricsを使用して、jetty 8 サーバーにヘルスチェック サーブレットを実装しました。メトリックは、ロード バランサーからポーリングされるだけでなく、定期的 (5 分) にログ ファイルに書き込まれます。さらに、CPU 負荷やメモリ消費などの一部のメトリックが重大な制限に達すると、電子メール通知が送信されます。
これは、CPU 負荷とシステム メモリ消費に最適です。ただし、JVM メモリ消費量を測定するために定義されたメトリックの 1 つは、サーバーが安定して動作しているにもかかわらず、定義されたしきい値の 95% を定期的に超えています。したがって、この特定の指標に関する決定を再考する必要があるかもしれません。ヘルスチェックで使用するのに適した指標ですか? ガベージ コレクターが実行されるまで、Web アプリケーションが定期的にしきい値に達するのは、メモリ リークの兆候ですか?それとも、長時間実行されるすべての Web アプリケーションで予期される正常な動作ですか?
ご意見ありがとうございます。
JVM メモリ ヘルスチェックを実行するコードを次に示します。
Java ランタイム メモリ
private final Runtime runtime = Runtime.getRuntime();
Result check() throws Exception {
final long freeMem = this.runtime.freeMemory();
// maxMemory() is the value set by the JVM -Xmx (Max HeapSize) parameter
final long maxMem = this.runtime.maxMemory();
final long usedMem = maxMem - freeMem;
final double value = RatioGauge.Ratio.of(usedMem, maxMem).getValue();
final double threshold = 0.95;
if (value < threshold) {
// Everything OK: Memory usage usage is below the threshold.
} else {
// NOT OK: Memory usage is above the threshold.
}
}