从命令行获取Java VisualVM数据

时间:2014-09-30 21:58:18

标签: cmd heap-memory jvisualvm

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

我使用的版本是1.7.0_51。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

final JMXServiceURL jmxUrl = new JMXServiceURL(jmxServiceUrl);
final JMXConnector jmxConnector = JMXConnectorFactory.connect(jmxUrl);
final MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();

然后,使用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")));

您需要查询全系列的Mbeans。使用JVisualVM查看这些MBean是什么。

<强>更新

有关如何打开JMX端口的信息,请参阅this answer