一种基于jmx远程监控线程池运行状态的方法及系统技术方案

技术编号:37609572 阅读:15 留言:0更新日期:2023-05-18 12:01
本发明专利技术公开了一种基于jmx远程监控线程池运行状态的方法及系统;先创建管理构件MBean,并获取线程池对象及其运行状态数据;再将管理构件MBean注册到jmx服务中;通过jmx api接口调用jmx服务,获取线程池运行状态数据以监控程池运行状态;本方案基于java的jmx技术,创建管理构件MBean来获取线程池的运行状态,并注册到jmx服务中,利用jmx服务提供的服务端能力,监控服务器侧作为jmx客户端远程调用jmx服务,获取线程池运行状态数据并入库保存,支持实时远程监控线程池运行状态;而且本发明专利技术的使用场景更加广泛,可以用于生产故障排障使用。可以用于生产故障排障使用。可以用于生产故障排障使用。

【技术实现步骤摘要】
一种基于jmx远程监控线程池运行状态的方法及系统


[0001]本专利技术涉及软件监控
,具体涉及一种基于jmx远程监控线程池运行状态的方法。

技术介绍

[0002]现有技术的监控线程池运行状态的方法大致可以划分为2类:
[0003]一类是构建增强线程池的方法:在需要监控的应用程序内部,基于原生线程池构建增强线程池,使用增强线程池对象来创建线程池,创建定时任务,在获取线程池的运行状态数据后,作为客户端主动向监控服务器发送监控数据。
[0004]另一类是打印线程池运行日志的方法:在需要监控的应用程序内部,创建定时任务,获取到线程池运行状态数据后,按照约定打印相关日志,然后在应用服务器上部署采集日志的agent,日志采集后发送到监控服务器。

技术实现思路

[0005]本专利技术所要解决的技术问题是:传统的监控线程池运行状态方法对应用程序的侵入性比较大,定时向监控服务器发送报文数据,不支持实时查看线程池运行状态,本专利技术目的在于提供一种基于jmx远程监控线程池运行状态的方法及系统,基于java的jmx技术,创建管理构件MBean来获取线程池的运行状态,并注册到jmx服务中,利用jmx服务提供的服务端能力,监控服务器侧作为jmx客户端远程调用jmx服务,获取线程池运行状态数据并入库保存,解决了实时远程监控线程池运行状态的问题。
[0006]本专利技术通过下述技术方案实现:
[0007]本方案提供一种基于jmx远程监控线程池运行状态的方法,包括:
[0008]步骤一,创建管理构件MBean,并获取线程池对象及其运行状态数据;
[0009]步骤二,将管理构件MBean注册到jmx服务中;
[0010]步骤三,通过jmx api接口调用jmx服务,获取线程池运行状态数据以监控程池运行状态。
[0011]本方案工作原理:传统的监控线程池运行状态方法对应用程序的侵入性比较大,如果是在已有的应用程序上实施监控部署,改造成本过大,需要修改创建线程池的代码,使用增强线程池,还会需要额外部署agent采集打印日志,应用服务器额外增加采集进程,减少服务器可用资源,最主要的是传统方法都是定时向监控服务器发送报文数据,不支持实时查看线程池运行状态,在需要实时查看线程池的场景下,无法适用。本方案提供的基于jmx远程监控线程池运行状态的方法,基于java的jmx技术,创建管理构件MBean来获取线程池的运行状态,并注册到jmx服务中,利用jmx服务提供的服务端能力,监控服务器侧作为jmx客户端远程调用jmx服务,获取线程池运行状态数据并入库保存,支持实时远程监控线程池运行状态。本方案不需要在应用程序内部创建定时任务,在获取线程池运行状态后,不是主动向监控服务器发送数据,或者打印日志进行采集,而是利用现有的jmx服务提供远程
服务端能力,由监控服务器侧作为jmx客户端远程调用jmx服务,来获取线程池运行状态,可以做到实时查看线程池运行状态;而且本专利技术的使用场景更加广泛,可以用于生产故障排障使用。
[0012]传统方法都是定时向监控服务器发送报文数据,不支持实时查看线程池运行状态;由于监控服务器作为被动方,需要匹配发送方的步伐,因此无法支持实时查看线程池运行状态;本专利技术提供了一种新的技术构思:通过监控服务器侧主动调取jmx服务获得线程池运行状态数据,由监控服务器侧作为主动方,便于根据需要实时远程监控线程池运行状态。
[0013]进一步优化方案为,步骤一包括以下子步骤:
[0014]T11,创建管理构件MBean;
[0015]T12,对每个管理构件MBean设置唯一命名的对象名称;
[0016]T13,在管理构件MBean的实现类中定义公共方法用于查询线程池对象,返回线程池运行状态的json字符串;
[0017]T14,基于公共方法查询待监控线程池对象;
[0018]T15,获取待监控线程池对象,并提取其运行状态参数:运行线程数、最大线程数、核心线程数和队列;
[0019]T16,将待监控线程池对象的运行状态参数写入map接口中并放入list集合,将list集合转换为json数组字符串得到待监控线程池运行状态数据。
[0020]进一步优化方案为,管理构件MBean的创建方法包括:
[0021]创建一个java类;
[0022]通过注解@Component把java类创建为spring bean对象;
[0023]通过注解@ManagedResource把spring bean对象创建为管理构件MBean对象。
[0024]进一步优化方案为,管理构件MBean的创建方法还包括:
[0025]创建管理构件MBean接口以及接口实现类,基于管理构件MBean接口以及接口实现类创建管理构件MBean对象。
[0026]进一步优化方案为,通过线程池对象的getPoolSize获得运行线程数,通过线程池对象的getMaximumPoolSize获得最大线程数,通过线程池对象的getCorePoolSize获得核心线程数,通过线程池对象的getQueue获得队列。
[0027]进一步优化方案为,基于公共方法查询待监控线程池对象的方法包括:基于非自定义线程池方法,从spring容器里的web服务上下文中获取待监控线程池对象。
[0028]进一步优化方案为,基于公共方法查询待监控线程池对象的方法还包括:基于自定义线程池方法,将待监控线程池声明为spring bean对象注册到spring容器里,然后查询线程池类型的spring bean对象得到待监控线程池对象。
[0029]进一步优化方案为,步骤二包括以下子步骤:
[0030]T21,构建jmx远程服务端能力,并确定服务端口和对象名称;
[0031]T22,设置@EnableMBeanExport注解以开启spring容器代理创建管理构件MBean对象的功能,并把管理构件MBean对象注册到jmx服务中。
[0032]进一步优化方案为,步骤三包括以下子步骤:
[0033]T31,监控服务器作为jmx客户端,jmx服务作为jmx服务端,jmx客户端通过jmx api接口调用jmx服务;
[0034]T32,Jmx客户端首先通过jmx服务端的ip地址和服务端口来连接jmx服务端,再通过对象名称来获取管理构件MBean对象,最后通过调用管理构件MBean对象的getAttribute获得线程池运行状态的json数组字符串;
[0035]T33,监控服务器获取到json数组字符串后保存到数据库,并对线程池运行状态数据可视化展示以监控线程池运行状态。
[0036]本方案还提供一种基于jmx远程监控线程池运行状态的系统,用于实现上述方案所述的基于jmx远程监控线程池运行状态的方法,包括:
[0037]创建模块,用于创建管理构件MBean,并获取线程池对象及其运行状态数据;
[0本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于jmx远程监控线程池运行状态的方法,其特征在于,包括:步骤一,创建管理构件MBean,并获取线程池对象及其运行状态数据;步骤二,将管理构件MBean注册到jmx服务中;步骤三,通过jmx api接口调用jmx服务,获取线程池运行状态数据以监控程池运行状态。2.根据权利要求1所述的一种基于jmx远程监控线程池运行状态的方法,其特征在于,步骤一包括以下子步骤:T11,创建管理构件MBean;T12,对每个管理构件MBean设置唯一命名的对象名称;T13,在管理构件MBean的实现类中定义公共方法用于查询线程池对象,返回线程池运行状态的json字符串;T14,基于公共方法查询待监控线程池对象;T15,获取待监控线程池对象,并提取其运行状态参数:运行线程数、最大线程数、核心线程数和队列;T16,将待监控线程池对象的运行状态参数写入map接口中并放入list集合,将list集合转换为json数组字符串得到待监控线程池运行状态数据。3.根据权利要求2所述的一种基于jmx远程监控线程池运行状态的方法,其特征在于,管理构件MBean的创建方法包括:创建一个java类;将java类创建为spring bean对象;将spring bean对象创建为管理构件MBean对象。4.根据权利要求2所述的一种基于jmx远程监控线程池运行状态的方法,其特征在于,管理构件MBean的创建方法还包括:创建管理构件MBean接口以及接口实现类,基于管理构件MBean接口以及接口实现类创建管理构件MBean对象。5.根据权利要求2所述的一种基于jmx远程监控线程池运行状态的方法,其特征在于,基于公共方法查询待监控线程池对象的方法包括:基于非自定义线程池方法,从spring容器里的web服务上下文中获取待监控线程池对象。6.根据权利要求2所述的一种基于jmx远程监控线程池运行状态的方法,其特征在于,基于公共方法查询待监控线程池对象的方法还包括:基于自定义线程池方法,将待监控线程池声明为spring bean对象注册到spring容器里,然后查询线程池类型的spring bean对象得到待监控线程池对象。7.根据权利...

【专利技术属性】
技术研发人员:周林
申请(专利权)人:四川新网银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1