从命令行获取 Java VisualVM 数据

use*_*231 6 cmd heap-memory jvisualvm

我首先要说的是,我几乎没有使用 Java VisualVM 的经验。但是,它包含一些开发人员希望看到的信息。当我为我的应用程序打开它时,它包含一个 CPU、内存、类和线程的图表。我想知道是否有办法从命令行获取该信息。因此,如果应用程序在调用时使用了 250 MB 的内存,是否可以编写一个返回 250 MB 的命令?同样与它使用的线程数有关?

我使用的版本是 1.7.0_51。

谢谢。

Vic*_*tor 1

VisualVM 只是一个客户端应用程序,它使用 JVM 通过 JMX 公开的信息。如果您想开发一个快速的客户端应用程序,然后通过命令行调用它,非常简单:

使用 URL 打开与 JVM 的连接(请注意,它需要打开 JMX 端口):

final JMXServiceURL jmxUrl = new JMXServiceURL(jmxServiceUrl);
final JMXConnector jmxConnector = JMXConnectorFactory.connect(jmxUrl);
final MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();
Run Code Online (Sandbox Code Playgroud)

然后,使用该MBeanServerConnection对象对 JVM 公开的 JMX Bean 执行查询。关于内存的示例:

ObjectName jvmMemory = new ObjectName("java.lang", "type", "Memory");           
CompositeData heapUsage = (CompositeData) mbsc.getAttribute(jvmMemory, "HeapMemoryUsage");
printer.print(String.valueOf(heapUsage.get("used")));
printer.print(String.valueOf(heapUsage.get("committed")));
printer.print(String.valueOf(heapUsage.get("max")));
Run Code Online (Sandbox Code Playgroud)

您有一系列 Mbean 需要查询。使用 JVisualVM 查看这些 MBean 是什么。

更新

有关如何打开 JMX 端口的信息,请参阅此答案