Skip to content

Commit ed9350a

Browse files
authored
fix java daemon count (#99)
1 parent 1e6ddc3 commit ed9350a

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

agent-plugins/agent-jvm-plugin/src/main/java/cloud/erda/agent/plugin/jvm/ThreadStatsProvider.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,26 @@ public class ThreadStatsProvider implements StatsProvider {
3131
public List<Metric> get() {
3232
List<Metric> metrics = new ArrayList<Metric>();
3333
metrics.add(Metric.New("jvm_thread", DateTime.currentTimeNano()).addTag("name", "count").addField("count", threads.getThreadCount()));
34-
metrics.add(Metric.New("jvm_thread", DateTime.currentTimeNano()).addTag("name", "daemon_count").addField("state", threads.getDaemonThreadCount()));
34+
ThreadGroup group = Thread.currentThread().getThreadGroup();
35+
36+
// 循环遍历获取Group中所有Thread信息
37+
while (group.getParent() != null) {
38+
group = group.getParent(); // 获取上一级线程组
39+
}
40+
41+
int daemonCount = 0;
42+
int totalCount = group.activeCount();
43+
Thread[] daemonThreads = new Thread[totalCount];
44+
group.enumerate(daemonThreads, true);
45+
46+
// 计算daemon线程数
47+
for (int i = 0; i < totalCount; i++) {
48+
if (daemonThreads[i].isDaemon()) {
49+
daemonCount ++;
50+
}
51+
}
52+
53+
metrics.add(Metric.New("jvm_thread", DateTime.currentTimeNano()).addTag("name", "daemon_count").addField("state", daemonCount));
3554
long[] deadThreads = threads.findDeadlockedThreads();
3655
metrics.add(Metric.New("jvm_thread", DateTime.currentTimeNano()).addTag("name", "dead_locked_count").addField("state", deadThreads == null ? 0 : deadThreads.length));
3756
java.lang.management.ThreadInfo[] threadInfo = threads.getThreadInfo(threads.getAllThreadIds(), 0);

0 commit comments

Comments
 (0)