监控和警报低级 JVM 指标的最佳实践是什么?

监控和警报低级 JVM 指标的最佳实践是什么?

我正在寻求为基于 Java 服务器的应用程序设置监控和警报,并希望找到一些监控 JVM 特定指标以及基于这些指标设计警报的最佳实践。

那么要监控的关键 JVM 指标是什么?以下是一些可能的指标:

  • 使用的堆空间
  • CPU使用率
  • GC 频率
  • GC 所花的时间
  • 线程数
  • 班级数量
  • 对象计数

一旦你开始观察一些指标,那么针对这些指标的良好警报策略是什么?CPU 使用率似乎很容易,但像堆空间这样的指标似乎很容易监控和查看,但它不能很好地转化为可警报的指标,因为你预计它会增长到容量,从而触发 GC。但像 GC 所花费的时间,尤其是与总时间的比率,似乎具有良好的警报潜力。

我并不是在寻找一个工具本身(即 Hyperic 或 Nagios)来执行监控,但如果有一个工具具有特别好的 Java 模板/默认图表/规则集,那将是方便的指针。

答案1

我以前用过与 JRE 捆绑在一起的 hprof。它可以监控 HEAP 和 CPU。我通常用它来监控 CPU 使用率,并检查哪个线程占用了大部分 CPU。 http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

我之前也用过JProbe,是一个商业软件。 http://www.quest.com/jprobe/

答案2

Ruxit 以信息图表的形式监控和呈现 JVM 指标。它提供有关以下内容的见解:CPU、内存、流量、重传、连接性、暂停、JVM 您可以在此处查看屏幕截图:Java 监控

Ruxit 使用基准测试,仅在必要时提醒您。我显然有点偏见,因为我在 Ruxit 工作。但可视化指标的信息图表样式确实很棒。

答案3

有几种类型的指标,许多 Java 应用程序使用 JMX 作为应用程序内指标,并且还有您在问题中提到的 Java VM 指标。

对于 JMX,你可以使用https://github.com/jmxtrans/jmxtrans并将指标发送到各种可用输出之一。对于标准指标,还有诸如jstat(d)jinfojps、 ... 等工具,它们通常很有帮助。

无论如何,我建议仔细查看 JMX 监控。应用程序通常会提供许多 JMX 指标,而不仅仅是 JVM 数据。

如果您需要极端的洞察力,那么可以选择 Ruxit/Dynatrace,使用该解决方案可以跟踪复杂基础设施和 Java 方法的指标。很酷的东西,但通常超出预算限制。

相关内容