可以通过命令行检索jconsole数据吗?

38

我目前使用 jconsole 监控我的 Java 应用程序的性能指标,并且希望 编写脚本 来进行这个数据采集

是否有一种方法可以将这些 VM 指标(堆内存使用情况、线程数、CPU 使用率等)检索到 STDOUT
top -p PID -b -n 1 中的数据并不太准确。

谢谢


此主题中提到了其他/类似的选项-https://dev59.com/uHI-5IYBdhLWcg3wpaB1 - ns15
9个回答

13

jconsole 只是提供了一个包装器,用于访问平台MBeanServer中的JMX MBeans。

您可以编写一个程序使用Attach API连接到您的虚拟机,然后查询MBeans。

或者您可以通过RMI公开平台MBeanServer并以此方式查询MBeans。

有关更多信息,请参见java.lang.management包。


12

也许 jvmtop 值得一看。
它是一个命令行工具,提供了几个指标的实时视图。

虚拟机概述模式的示例输出:

 JvmTop 0.4.1  amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46

8

7
请看jmap,它可以用于从控制台获取堆转储。

对于堆转储中未涵盖的数据,我认为jconsole只是使用JMX连接到运行的JVM以获取统计信息-因此可能可以创建自己的应用程序,从JMX中提取相同类型的统计数据。


6
一些其他有用的CLI工具,可用于监视Java应用程序,包括: - Jmxterm: 可以完全访问应用程序服务器上的所有MBeans,并可以交互或非交互运行。 - jmxbox: 只能通过TCP套接字连接,不能直接连接到本地进程及其PID。

4
您可能会发现jvm-mon在此方面非常有用。它是一个命令行的JVM监控工具,可以显示以下内容:
  • JVM进程
  • CPU和GC使用情况
  • 堆使用情况和大小
  • 顶部线程
工具打开时指标和图表会实时更新。
示例:jvm-mon

有没有像 jvm-mon 这样的工具可以从命令行终端/控制台监控Java-17应用程序? - undefined

2
jstack在常规输出中提供了许多有用的信息,直接可以查看堆内存使用情况,按GC区域细分;线程计数可以通过一些perl / grep /等命令来确定。

0

0
这是对你问题的部分回答:
set JAVA_OPTS=%JAVA_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接