监控ThreadPoolExecutor具体Task在Queue中等待时间
来源:互联网 发布:算法导论 附加部分答案 编辑:程序博客网 时间:2024/06/11 02:23
可监控_ThreadPoolExecutor
主要关心的问题:
* 最关心的监控数据:* 1.task队列中等待时间* 2.task任务执行时间** 两种方案:* 1. future_task* 2. queue* 注意:Config-自动获取配置文件注解(后面有时间写)
处理:
继承,初始化构造方法
private static MonitoringLinkedBlockingQueue monitoringQueue = new MonitoringLinkedBlockingQueue(maxQueueSize);public MonitoringThreadPoolExecutor() { super(CPU_PROCESSOR_NUM << 1, CPU_PROCESSOR_NUM << 2, 50, TimeUnit.SECONDS, monitoringQueue, new NamedThreadFactory(THREAD_FACTORY_NAME, false), new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { Monitor.recordOne("monitoring_thread_poll_task_reject"); } }); //设置为true,corePoolSize_alivetime后自动销毁 allowCoreThreadTimeOut(true);}
init-基本监控定时获取
@PostConstructprivate void init() {//添加常用监控final ScheduledExecutorService coreMonitorService = Executors.newScheduledThreadPool(1);coreMonitorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { Monitor.recordSize(THREAD_FACTORY_NAME + "_active_thread_count", getActiveCount()); Monitor.recordSize(THREAD_FACTORY_NAME + "_pool_size", getPoolSize()); Monitor.recordSize(THREAD_FACTORY_NAME + "_queue_size", getQueue().size()); Monitor.recordSize(THREAD_FACTORY_NAME + "_largest_pool_size", getLargestPoolSize()); Monitor.recordSize(THREAD_FACTORY_NAME + "_task_count", getTaskCount()); Monitor.recordSize(THREAD_FACTORY_NAME + "_completed_task_count", getCompletedTaskCount()); }}, 1L, 2L, TimeUnit.SECONDS);Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { shutdown(); coreMonitorService.shutdown(); }}));}
重写submit
@Overridepublic MonitoringFutureTask<?> submit(Runnable task){if (task == null) { throw new NullPointerException();}if (task instanceof NamedRunnable) { MonitoringFutureTask<?> monitoringFutureTask = new MonitoringFutureTask<>(task, null); execute(monitoringFutureTask); return monitoringFutureTask;}else { throw new ForbiddenException("请使用NamedRunnable!");}}
动态修改线程池核心配置
@Config("can_monitor_thread_pool_executor.properties")private void changeProperties(Map<String, String> config) {logger.info("can_monitor_thread_pool_executor:{}", config);if (config != null) { int coreSize = IntegerUtil.parseStrToInt(config.get("coreSize")); if (coreSize > 0) { setCorePoolSize(coreSize); } int maxSize = IntegerUtil.parseStrToInt(config.get("maxSize")); if (maxSize > 0) { setMaximumPoolSize(maxSize); } int queueSize = IntegerUtil.parseStrToInt(config.get("queueSize")); if (queueSize > 0) { monitoringQueue.setMaxQueueSize(queueSize); } int keepAliveTime = IntegerUtil.parseStrToInt(config.get("keepAliveTime")); if (keepAliveTime > 0) { String timeUnitStr = config.get("timeUnit"); if (timeUnitStr != null) { TimeUnit timeUnit; try { timeUnit = TimeUnit.valueOf(timeUnitStr); setKeepAliveTime(keepAliveTime, timeUnit); } catch (IllegalArgumentException e) { Monitor.recordOne("timeUnit_config_error"); setKeepAliveTime(keepAliveTime, TimeUnit.SECONDS); } } else { setKeepAliveTime(keepAliveTime, TimeUnit.SECONDS); } }}}
-
阅读全文
0 0
- 监控ThreadPoolExecutor具体Task在Queue中等待时间
- 等待时间 single-task message
- gae中重复队列task queue的2种方式
- 在C#中使用Queue
- tomcat在eclipse中调试时,断点频繁停在threadpoolexecutor
- tomcat7在eclipse中,调试时断点频繁停在threadpoolexecutor
- 在Grunt task中集成Protractor
- 函数具体功能代码 在 adoExecute中
- 在android 中mvc的具体体现
- 系统停止在uboot, bootdelay等待时间处
- 在 UIWebView 中监控 XMLHttpRequest
- 在Kubernetes中监控Nginx
- apache中如何设置请求等待时间
- Adding a Single Task to a Queue
- Nodejs指西 Event Loop Task queue
- 多线程启用Task,在循环中初始化Task实例执行错误
- 在程序中使用 Windows的Task Bar
- 如何在eclipse中调试自定义的ant task
- centos服务器上mysql5.7.19数据库安装
- s5pv210-Linux驱动之USB-HOST主机控制器之EHCI
- Django URL传递参数的方法总结
- 2016 四川省赛F. Floyd-Warshall(LCA + brute force)
- 2-2 Time类的定义
- 监控ThreadPoolExecutor具体Task在Queue中等待时间
- Graduation Project Day 1
- 字符串反转(按单词正序输出),保留并打印所有空格。
- Openjudge 06:月度开销
- 一个斐波那契数列的前10项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,对于一个最大项的值不超过n的斐波那契数列,求值为偶数的项的和。
- Codeforce Round #438 C.Bus(贪心)
- Mathematical Morphology —— Path Operator
- java入门第三季--图书馆借书系统
- [蓝书/Ch5] The K-League UVALive