2016-09-20 7 views
1

Мне нужно получить значение для подсчета блоков потока jvm с использованием OID, чтобы график можно рисовать с использованием cacti. Я много искал, но нашел только следующий OID 1.3.6.1.4.1.42.2.145.3.163.1.1.3.10.1.4. Когда я пытаюсь snmpwalk, он возвращает sub OID с значениями Counter64. Над OID представляетЧто такое SNMP OID для jvm Количество блоков потока

Общее количество раз, что этот поток блокированных войти или повторно ввести монитор ..

Когда я snmpwalk выше, возвращает значения для каждого потока и его заблокированного значения , Но я хочу, чтобы количество всех потоков было заблокировано в указанное время. Любая помощь будет оценена по достоинству.

ответ

2

Просто нет такого счетчика.
Все доступные идентификаторы JVM перечислены here.

Ближайшие показатели JVM, которые могут вас заинтересовать, это sun.rt._sync_ContendedLockAttempts counter.

Вот как получить его из Java:

import sun.management.ManagementFactoryHelper; 
import sun.management.counter.Counter; 
import java.util.NoSuchElementException; 

public class Test { 

    public static void main(String[] args) { 
     System.out.println(getContendedLockAttempts()); 
    } 

    private static long getContendedLockAttempts() { 
     for (Counter counter : ManagementFactoryHelper.getHotspotRuntimeMBean().getInternalRuntimeCounters()) { 
      if ("sun.rt._sync_ContendedLockAttempts".equals(counter.getName())) { 
       return (long) counter.getValue(); 
      } 
     } 
     throw new NoSuchElementException(); 
    } 
} 

Или из командной строки:

jcmd {PID} PerfCounter.print | grep sun.rt._sync_ContendedLockAttempts 
Смежные вопросы