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

背景:

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

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

/**
 * 
 * 线程池监控注册器
 * 
 * @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:本人刚刚实习,也不是科班出身的程序员,如果有什么技术表述的错误,请指正。。

阅读 3.8k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题