我需要使用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时,它会返回每个线程的值及其阻塞值。但我想要在指定时间内阻塞的所有线程的计数。任何帮助将不胜感激。
答案 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