我正在寻求为基于 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)
、jinfo
、jps
、 ... 等工具,它们通常很有帮助。
无论如何,我建议仔细查看 JMX 监控。应用程序通常会提供许多 JMX 指标,而不仅仅是 JVM 数据。
如果您需要极端的洞察力,那么可以选择 Ruxit/Dynatrace,使用该解决方案可以跟踪复杂基础设施和 Java 方法的指标。很酷的东西,但通常超出预算限制。