public List getPools() throws Exception {
List memoryPools = new LinkedList();
MBeanServer mBeanServer = new Registry().getMBeanServer();
Set memoryOPools = mBeanServer.queryMBeans(new ObjectName("java.lang:type=MemoryPool,*"), null);
//
// totals
//
long totalInit = 0;
long totalMax = 0;
long totalUsed = 0;
long totalCommitted = 0;
for (Iterator it = memoryOPools.iterator(); it.hasNext();) {
ObjectInstance oi = (ObjectInstance) it.next();
ObjectName oName = oi.getObjectName();
MemoryPool memoryPool = new MemoryPool();
memoryPool.setName(JmxTools.getStringAttr(mBeanServer, oName, "Name"));
memoryPool.setType(JmxTools.getStringAttr(mBeanServer, oName, "Type"));
CompositeDataSupport cd = (CompositeDataSupport) mBeanServer.getAttribute(oName, "Usage");
//
// It seems that "Usage" attribute of one of the pools may turn into null intermittently. We better have a
// dip in the graph then an NPE though.
//
if (cd != null) {
memoryPool.setMax(JmxTools.getLongAttr(cd, "max"));
memoryPool.setUsed(JmxTools.getLongAttr(cd, "used"));
memoryPool.setInit(JmxTools.getLongAttr(cd, "init"));
memoryPool.setCommitted(JmxTools.getLongAttr(cd, "committed"));
} else {
logger.error("Oops, JVM problem? "+oName.toString()+" \"Usage\" attribute is NULL!");
}
totalInit += memoryPool.getInit();
totalMax += memoryPool.getMax();
totalUsed += memoryPool.getUsed();