将VisualVM信息另存为数据

mat*_*ter 3 visualvm jvisualvm

使用VisaulVM,我想以数据形式获取此数据,而无需应用图像处理算法...我该怎么做?我认为这不会是快照。

在此处输入图片说明

我不确定VisualVM和jVisualVM的差异如何,命名肯定会造成混淆,但是我正在运行Oracle提供的(Version 1.7.0_80 (Build 150109)

谢谢!

Tom*_*rka 5

您可以将Tracer插件与各种探针一起使用。跟踪器可以导出CSV,HTML或XML数据。


kic*_*hik 3

所有这些信息都可以通过JMX获得。这就是 VisualVM 获取信息的方式,您也可以使用相同的技术来获取信息。首先从“工具”菜单安装 VisualVM-MBeans 插件。这将添加另一个标题为 MBeans 的选项卡,您可以在其中查看应用程序的所有可用数据。java.lang.Memory您将在和下找到图表数据java.lang.OperationSystem

如果您尝试检查自己的进程的信息,只需调用ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage()和即可ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()。还有更多,但这些应该可以帮助您入门。

要获取精确的 CPU 使用率,请参阅:使用 OperatingSystemMXBean 获取 CPU 使用率

如果您想获取有关另一个进程的信息,则需要更多代码。关于访问远程 MBean 服务器有一个完整的答案,但基本上是:

// replace host and port
// not tested, might not work
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://<addr>:<port>");
JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
OperatingSystemMXBean bean = ManagementFactory.getPlatformMXBean(connection, OperatingSystemMXBean.class);
bean.getSystemLoadAverage();
Run Code Online (Sandbox Code Playgroud)

您还必须使用公开的 JMX 启动 Java 进程,如如何在我的 JVM 上激活 JMX 以使用 jconsole 进行访问?但基本上:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)

还有一种方法可以枚举本地计算机上运行的 Java 进程,甚至可以连接到未启用 JMX 的进程(尽管您获得的数据较少)。如果这就是您正在寻找的内容,VisualVM源代码将是一个很好的起点。