分布式集群环境下怎么合并统计线程池信息?
背景:
刚进公司实习,主管让我做一个监控线程池的功能模块。
就是在创建线程池后,会调用注册一下我的线程池工具。
/** *
* 线程池监控注册器
*
* @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