JMX可视化监控线程池

2019-10-22  本文已影响0人  何甜甜在吗

前两天阅读公司代码看到了用JMX监控定时任务信息和状态,JMX这个单词感觉很熟于是便去查阅了一下,并写了监控线程池的Demo

通过阅读本篇文章你将了解到:

什么是JMX

JMX简介

JMX(Java Management Extensions),监控管理框架,通过使用JMX可以监控和管理应用程序。JMX最常见的场景是监控Java程序的基本信息和运行情况,任何Java程序都可以开启JMX,然后使用JConsoleVisual VM进行预览

JMX架构
JMX架构图
总共分为三层,分发层、代理层、设备层
分发层:根据不同的协议定义了对代理层进行各种操作的管理接口,简单的来说是监控指标的查看方式,可以是HTTP连接、RMI连接、SNMP连接
代理层:管理MBean,通过将MBean注册到代理层实现MBean的管理,除了注册MBean,还可以注册Adapter,代理层在应用中一般都是MBeanService

设备层:监控指标抽象出的类,可以分为以下几种:

应用中一般使用Standard MBean比较多,所以这里只介绍Standard MBean,使用Standard MBean需要满足一定的规则,规则如下:

线程池简单介绍

线程池是线程的管理工具,通过使用线程池可以复用线程降低资源消耗、提高响应速度、提高线程的可管理性。如果在系统中大量使用线程池,就必须对线程池进行监控方便出错时定位问题。可以通过线程池提供的参数进行监控,线程池提供的参数如下:

方法 含义
getActiveCount 线程池中正在执行任务的线程数量
getCompletedTaskCount 线程池已完成的任务数量
getCorePoolSize 线程池的核心线程数量
getLargestPoolSize 线程池曾经创建过的最大线程数量
getMaximumPoolSize 线程池的最大线程数量
getPoolSize 线程池当前的线程数量
getTaskCount 线程池需要执行的任务数量

应用

介绍完JMX及线程池以后,写一个JMX监控线程池的Demo,总不能纸上谈兵吧

通过继承线程池来自定义线程池,并在构造函数中加入了poolName标明是哪一个线程池,同时重写了beforeExecuteafterExecuteterminated等方法,在beforeExecute方法中记录线程池执行的时间,在afterExecute方法中计算线程执行的耗时、最大耗时、最小耗时、平均耗时。重写线程池生成线程的方法,指定了生成的线程名

点击test-pool-1下的type=threadPoolParam

image.png

通过刷新获取线程池最新的监控指标
test-pool-1type=threadPoolParam这些属性是在ObjectName中定义的属性值

总结

使用JMX监控线程池只是JMX一个功能,本篇文章只是学以致用,更多有关JMX以及线程池的内容可以查阅其他资料。文章若有错误欢迎指正

最后附:项目代码,欢迎forkstar,【划重点了】

上一篇下一篇

猜你喜欢

热点阅读