mat*_*ter 3 visualvm jvisualvm
使用VisaulVM,我想以数据形式获取此数据,而无需应用图像处理算法...我该怎么做?我认为这不会是快照。
我不确定VisualVM和jVisualVM的差异如何,命名肯定会造成混淆,但是我正在运行Oracle提供的(Version 1.7.0_80 (Build 150109))
谢谢!
所有这些信息都可以通过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源代码将是一个很好的起点。