什么是jvm线程块计数

时间:2016-09-20 09:26:30

标签: java multithreading jvm snmp

我需要使用OID获取jvm线程块计数的值,以便可以使用cacti绘制图形。我搜索了很多,但只发现了OID 1.3.6.1.4.1.42.2.145.3.163.1.1.3.10.1.4。当我尝试snmpwalk时,它返回具有Counter64值的子OID。 OID以上代表

  

此线程阻止进入或重新进入监视器的总次数。

当我在上面进行snmpwalk时,它会返回每个线程的值及其阻塞值。但我想要在指定时间内阻塞的所有线程的计数。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

根本就没有这样的反击 列出了所有可用的JVM OID here

您可能感兴趣的最接近的JVM指标是sun.rt._sync_ContendedLockAttempts计数器。

以下是如何从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