我已经使用Metrics在我们的 jetty 8 服务器上实现了一个健康检查 servlet 。除了从我们的负载均衡器轮询之外,指标还会定期(5 分钟)写入日志文件。此外,当 CPU 负载或内存消耗等某些指标达到关键限制时,还会发送电子邮件通知。
这非常适合 CPU 负载和系统内存消耗。但是,尽管服务器运行稳定,但定义用于衡量 JVM 内存消耗的指标之一经常超过定义的阈值 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.
}
}