通过 java 监控 JVM CPU/RAM 使用情况

问题描述

我使用 JMX 获取 JVM 利用率(cpu、内存、线程...)并在 Jconsole 上显示结果, 但我需要 API 来与 Java 代码集成 并利用 tomcat 然后将数据记录到文件中 Windows 中是否有从命令行使用的 API 技术或服务?

解决方法

JMX 是一种设计用于 Java 程序的技术,所以是的,这是可能的。您需要创建一个 JMX 服务 URL 以指向服务器(大概在本地主机上),然后将其与 JMX 连接器连接:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url,null);

一旦你有了它,你就可以按名称获取 MBean,

MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

从那里您可以获得 MBean,包括在 jconsole 中报告的内容。例如,使用 RuntimeMXBean:

RuntimeMXBean proxy = ManagementFactory.newPlatformMXBeanProxy(
  mbsc,ManagementFactory.RUNTIME_MXBEAN_NAME,RuntimeMXBean.class);
long uptime = proxy.getUptime();

如果你想检查内存,你需要找出可用的内存池,然后遍历每个。您还可以设置侦听器以查看更改。 请参阅教程了解更多信息:https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/tutorial/tutorialTOC.html