Java 更长时间的应用程序监控?

Java application monitoring over longer time periods?

使用 JConsole 等工具,我可以实时监控 Java 应用程序。如何分析较长时间段内的性能?让我们说一天?还是一周?

有没有我可以使用的简单工具,例如 jConsole?

通用 "monitor as much parameters as we can" 方法有以下选项:

  • 命令行:jcmd <PID|main class> PerfCounter.print (ref) – 然后您需要仔细考虑它输出的属性名称,定期安排 运行,存储数据在某处,自己想象一下。
  • 很多(全部?)这些信息也由 JMX bean 公开。然后您可以找到它们(例如,您可以看到它们以及它们在 JConsole 中导出的内容),并使用命令行工具,例如jmxterm 您可以记录这些值并将它们可视化。同样的程序:安排自己,记录,想象自己。它不太用户友好,所以我提到这种方法的原因是...
  • ...人们通常使用专门的监控系统(想想 Graphite、Zabbix、Logstash/Kibana 等——我将它们作为搜索键与 "Java/JVM/JMX/JFR" 一起放入)可以收集来自 Java 的信息通过 JMX 处理并很好地呈现。周期性运行,存储时间序列数据,可视化由这些系统解决。
  • JFR ("Java Flight Recorder") is a mechanism built into the JVM that allows to have continuous recording of many JVM + system metrics, dumps them into a file periodically, then you can visualize these with JMC ("Java Mission Control")。从某种意义上说,它是 "cheaper",您不需要 install/support 一个单独的监控系统,但不太容易访问(除非与监控系统配对):您需要收集、下载、处理 文件.

除此之外,还有jstat,与jcmd ... PerfCounter.print基本相同,但主要针对内存相关的指标,它内置了"run periodically"功能并呈现结果略有不同(一个 "recording" – 1 行)。

我会说:如果你需要做一次或偶尔做一次,无论是在更长的时间内,并且只需要几个参数,比如 memory/number of threads/...,然后使用 jstat, jcmd PerfCounter.print;如果您需要更多参数,则 JFR/JMC。如果您需要它作为与您的系统一起运行的东西,始终收集和呈现,供在 JVM 所在系统中没有管理员权限的人使用,那么请查看监控系统及其与 Java 应用程序的集成。