@@ -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