我首先要说的是,我几乎没有使用 Java VisualVM 的经验。但是,它包含一些开发人员希望看到的信息。当我为我的应用程序打开它时,它包含 CPU、内存、类和线程的图表。我想知道是否有办法从命令行获取该信息。那么,如果应用程序在调用时使用了 250 MB 的内存,是否可以编写一个返回 250 MB 的命令?同样与它使用的线程数有关?
我使用的版本是 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 端口的信息,请参阅 this answer .
关于cmd - 从命令行获取 Java VisualVM 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130824/