这是一个已知的问题,可能是由于应用程序与 JVM 之间的内部细节导致的。然而,可以使用以下代码示例解决这个
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularData;
import org.apache.activemq.artemis.core.management.ObjectNameBuilder;
import org.apache.activemq.artemis.jmx.JMXUtil;
public class MemoryUsage {
public static void main(String[] args) throws Exception {
ObjectName addressName = ObjectNameBuilder.DEFAULT.getJMSServerAddressSettingsObjectName("localhost", 61616, "main");
MBeanServerConnection connection = JMXUtil.getMBeanServerConnection();
ObjectInstance oi = connection.getObjectInstance(addressName);
TabularData data = (TabularData) connection.getAttribute(oi.getObjectName(), "AddressSettings");
for (Object key : data.keySet()) {
CompositeData cd = (CompositeData) data.get(key);
System.out.println(cd.get("memoryUsage"));
}
}
}
该代码使用 JMX API 访问 MBean 服务器上的 ActiveMQ 系统对象,并通过查询“AddressSettings”属性,获取地址配置对象的列表。然后可以从每个对象中提取 "memoryUsage" 元素,以获取正确的内存使用情况。