cmd - 从命令行获取 Java VisualVM 数据

标签 cmd heap-memory jvisualvm

我首先要说的是,我几乎没有使用 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/

相关文章:

Windows命令删除除指定的文件列表之外的所有文件,这些文件的名称可能包含空格

windows - 使用很多特殊参数在 .bat 中执行多个命令

c - 这个使用 realloc 的 C 代码有什么错误?

JTable char[]、字符串和对象消耗 Java 堆空间

java - Eclipse:Java 监视器不会显示 cpu 统计信息

java - 将 JVisualVM 快照中的 "objects allocated"与 Java 堆转储中的实例数进行比较

windows - 使用 IF 批量过滤多个结果

command-line - 使用命令行在文件中查找 2 个值 |指令

c++ - 访问堆栈中的数组会影响性能吗

java - jvisualvm 无法与 eclipse 一起使用