in apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/jvm/thread/ThreadProvider.java [34:76]
public Thread getThreadMetrics() {
int runnableStateThreadCount = 0;
int blockedStateThreadCount = 0;
int waitingStateThreadCount = 0;
int timedWaitingStateThreadCount = 0;
ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), 0);
if (threadInfos != null) {
for (ThreadInfo threadInfo : threadInfos) {
if (threadInfo == null) {
continue;
}
switch (threadInfo.getThreadState()) {
case RUNNABLE:
runnableStateThreadCount++;
break;
case BLOCKED:
blockedStateThreadCount++;
break;
case WAITING:
waitingStateThreadCount++;
break;
case TIMED_WAITING:
timedWaitingStateThreadCount++;
break;
default:
break;
}
}
}
int threadCount = threadMXBean.getThreadCount();
int daemonThreadCount = threadMXBean.getDaemonThreadCount();
int peakThreadCount = threadMXBean.getPeakThreadCount();
return Thread.newBuilder().setLiveCount(threadCount)
.setDaemonCount(daemonThreadCount)
.setPeakCount(peakThreadCount)
.setRunnableStateThreadCount(runnableStateThreadCount)
.setBlockedStateThreadCount(blockedStateThreadCount)
.setWaitingStateThreadCount(waitingStateThreadCount)
.setTimedWaitingStateThreadCount(timedWaitingStateThreadCount)
.build();
}