Cmd 从命令行获取Java VisualVM数据

Cmd 从命令行获取Java VisualVM数据,cmd,heap-memory,jvisualvm,Cmd,Heap Memory,Jvisualvm,我首先要说的是,我几乎没有使用Java VisualVM的经验。但是,它包含一些开发人员希望看到的信息。当我为我的应用程序打开它时,它包含一个CPU、内存、类和线程的图形。我想知道是否有一种方法可以从命令行获取这些信息。那么,如果应用程序在调用时使用了250MB的内存,我是否可以编写一个返回250MB的命令?同样,它使用的线程数是多少 我使用的版本是1.7.0_51 谢谢。VisualVM只是一个客户端应用程序,它使用JVM通过JMX公开的信息。如果您想开发一个快速客户端应用程序,然后通过命令行

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

我使用的版本是1.7.0_51


谢谢。

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

使用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")));
您需要查询一系列MBean。使用JVisualVM查看这些MBean是什么

更新


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

VisualVM只是一个客户端应用程序,它使用JVM通过JMX公开的信息。您可以轻松地开发一个cilent应用程序来查询这些jmxbean并检索所需的信息,然后通过命令行调用它。这对你合适吗?听起来应该行。但是,我不知道如何做:/