分布式集群环境下怎么合并统计线程池信息?

背景:

刚进公司实习,主管让我做一个监控线程池的功能模块。

就是在创建线程池后,会调用注册一下我的线程池工具。

/**

*

* 线程池监控注册器

*

* @author Ric

*

*/

public final class ThreadPoolMonitorUtils {

private static final Map<String, ExecutorService> map = new HashMap<String, ExecutorService>();

/**

* 将线程池加入监控队列

* @param es

* @param esUniqueName

*/

public synchronized static void register(ExecutorService es, String esUniqueName){

if(map.containsKey(esUniqueName)){

throw new RuntimeException("重复注册监控"+esUniqueName);

}

if(map.containsValue(es)){

throw new RuntimeException("重复注册监控值"+esUniqueName);

}

map.put(esUniqueName, es);

}

public static Map<String, ExecutorService> getMap() {

return map;

}

}

然后使用者在页面上能够实时查询当前项目的进程池状态。

重点数据是:排队任务数,执行总数,当前线程数,空闲线程数

如下图:

图片描述

现在是说要把我这个功能应用到部门其他的系统上,要求考虑分布式+集群,对代码进行改造。

问题

比如我现在这个项目叫做pro,如果我要部署多个pro,我应该怎么样才能统计到每个项目实例中注册的线程池信息呢(按照单个物理服务器分类)?在分布式场景下还会有什么变化吗?我想过通过第三方缓存,但是不符合实时的需求。。可否请大佬们给点思路或者已有的资料参考。万分感谢。

btw:本人刚刚实习,也不是科班出身的程序员,如果有什么技术表述的错误,请指正。。

回答:

说一个简单的办法:在公司内部注册一个域名,搭一个 http 服务,数据存在是 mysql 数据库里。每个项目实例定期将统计信息汇报到这个 http 服务。再写一个查询页面,从 mysql 里查出数据并展示。

以上是 分布式集群环境下怎么合并统计线程池信息? 的全部内容, 来源链接: utcz.com/p/179420.html

回到顶部