2012-02-09 2 views
4

Возможно ли получить статистику использования памяти на сервере tomcat с использованием JMX API. Какая Mbean может предоставить мне эту информацию? Я застрял на формирование ObjectName в коде нижеКак получить использование памяти tomcat 7 с помощью JMX API?

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:2020/jmxrmi"); 
JMXConnector jmxc = JMXConnectorFactory.connect(url); 
MBeanServerConnection server = jmxc.getMBeanServerConnection(); 

    Object o = jmxc.getMBeanServerConnection().getAttribute(
      new ObjectName("-----"); 

Интересно, как JConsole рисует графики памяти, любые указатели на исходный код?

ответ

4
MBeanServer connection = ManagementFactory.getPlatformMBeanServer(); 
Set<ObjectInstance> set = connection.queryMBeans(new ObjectName("java.lang:type=Memory"), null); 
ObjectInstance oi = set.iterator().next(); 
// replace "HeapMemoryUsage" with "NonHeapMemoryUsage" to get non-heap mem 
Object attrValue = connection.getAttribute(oi.getObjectName(), "HeapMemoryUsage"); 
if(!(attrValue instanceof CompositeData)) { 
    System.out.println("attribute value is instanceof [" + attrValue.getClass().getName() + 
      ", exitting -- must be CompositeData."); 
    return; 
} 
// replace "used" with "max" to get max 
System.out.println(((CompositeData)attrValue).get("used").toString()); 
+0

выше код возвращает мне постоянную метрику из jvm, а не приложение wise – sanre6

+0

Я понял ваш код после прочтения композитного типа данных, спасибо – sanre6

+0

Он работает! благодаря! – Gaucho

1

образец кода

Список memBeans = // получить список MBeans для (Итератор я = memBeans.iterator(); i.hasNext();) {

MemoryPoolMXBean mpool = (MemoryPoolMXBean)i.next(); 
MemoryUsage usage = mpool.getUsage(); 

String name = mpool.getName();  
float init = usage.getInit()/1000; 
float used = usage.getUsed()/1000; 
float committed = usage.getCommitted()/1000; 
float max = usage.getMax()/1000; 
float pctUsed = (used/max)*100; 
float pctCommitted = (committed/max)*100; 

}

here и here некоторые ссылки, которые могут помочь

+0

как получить список MBeans я могу видеть только getDomains() в классе MBeanServerConnection – sanre6

+0

Я обновил свой ответ, чтобы включить некоторые ссылки –

3

фрагмента коды для получения используемой памяти для локального/удаленного кота:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://{remote ip/localhost}:2020/jmxrmi"); 
     JMXConnector jmxc = JMXConnectorFactory.connect(url); 
     MBeanServerConnection server = jmxc.getMBeanServerConnection(); 
     Object o = jmxc.getMBeanServerConnection().getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage"); 
     CompositeData cd = (CompositeData) o; 
     System.out.println(cd.get("used")); 
Смежные вопросы