【发布时间】:2015-12-07 15:13:12
【问题描述】:
使用 VisaulVM,我想在不应用图像处理算法的情况下将其作为数据获取……我该怎么做?我认为这不会来自快照。
我不确定 VisualVM 和 jVisualVM 有何不同,命名肯定令人困惑,但我正在运行 Oracle 提供的一个 (Version 1.7.0_80 (Build 150109))
谢谢!
【问题讨论】:
-
VisualVM 里面可能没有这样的选项吗?
使用 VisaulVM,我想在不应用图像处理算法的情况下将其作为数据获取……我该怎么做?我认为这不会来自快照。
我不确定 VisualVM 和 jVisualVM 有何不同,命名肯定令人困惑,但我正在运行 Oracle 提供的一个 (Version 1.7.0_80 (Build 150109))
谢谢!
【问题讨论】:
您可以将Tracer plugin 与各种探针一起使用。 Tracer 可以以 CSV、HTML 或 XML 格式导出数据。
【讨论】:
所有这些信息都可以通过JMX 获得。这就是 VisualVM 获取信息的方式,您也可以使用相同的技术来获取它。首先从工具菜单安装 VisualVM-MBeans 插件。这将添加另一个标题为 MBeans 的选项卡,您可以在其中查看应用程序的所有可用数据。您将在java.lang.Memory 和java.lang.OperationSystem 下找到图形数据。
如果您要检查自己进程的信息,只需调用ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage() 和ManagementFactory.getMemoryMXBean().getHeapMemoryUsage() 即可。还有更多,但这些应该可以帮助您入门。
要获得精确的 CPU 使用率,请参阅:Using OperatingSystemMXBean to get CPU usage
如果您想获取有关另一个进程的信息,则需要更多代码。 Accessing a remote MBean server 上有一个完整的答案,但基本上是:
// 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();
您还必须按照How to activate JMX on my JVM for access with jconsole? 中的说明使用公开的 JMX 启动您的 Java 进程,但基本上:
-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
还有一种方法可以枚举本地机器上运行的 Java 进程,甚至连接到未启用 JMX 的进程(尽管您获得的数据较少)。如果这就是您要寻找的内容,VisualVM Source Code 将是一个不错的起点。
【讨论】:
回答您关于命名的其他问题:
VisualVM 是托管在visualvm.java.net 的开源项目,Java VisualVM 是 VisualVM 的稳定版本,带有 Oracle 品牌和其他一些小改动。 Java VisualVM 在 JDK 中分发。有一个table,您可以在其中找到哪个 VisualVM 版本是各个 JDK 更新中 Java VisualVM 的基础。
【讨论】: