CN116560834A - 一种动态线程池内置监控告警的方法和装置 - Google Patents
一种动态线程池内置监控告警的方法和装置 Download PDFInfo
- Publication number
- CN116560834A CN116560834A CN202310423429.0A CN202310423429A CN116560834A CN 116560834 A CN116560834 A CN 116560834A CN 202310423429 A CN202310423429 A CN 202310423429A CN 116560834 A CN116560834 A CN 116560834A
- Authority
- CN
- China
- Prior art keywords
- thread pool
- alarm
- task
- dynamic
- monitoring
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 87
- 238000012544 monitoring process Methods 0.000 title claims abstract description 85
- 230000001960 triggered effect Effects 0.000 claims abstract description 17
- 239000012634 fragment Substances 0.000 claims abstract description 7
- 238000009825 accumulation Methods 0.000 claims description 20
- 238000012986 modification Methods 0.000 claims description 18
- 230000004048 modification Effects 0.000 claims description 18
- 230000000694 effects Effects 0.000 claims description 17
- 230000008859 change Effects 0.000 claims description 10
- 230000000977 initiatory effect Effects 0.000 claims description 3
- 238000004064 recycling Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 12
- 230000015654 memory Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007858 starting material Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/32—Monitoring with visual or acoustical indication of the functioning of the machine
- G06F11/324—Display of status information
- G06F11/327—Alarm or error message display
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种动态线程池内置监控告警的方法,所述方法包括:获取动态线程池的标识,根据所述标识确定所述动态线程池;修改所述动态线程池的参数,所述参数包括分片数、最大值、队列长度;监控所述动态线程池,根据所述动态线程池的负载触发告警。通过本发明可以实现实时监控线程池的运行状态,触发设置的报警策略时报警。
Description
技术领域
本发明属于线程管理领域,具体涉及一种动态线程池内置监控告警的方法和装置。
背景技术
各行业快速发展,数据量千万计,在Java开发中,欲提高系统性能,线程池已经是必选的基础工具。项目中可能会创建很多线程池,既有IO密集型的,也有CPU密集型的,但线程池的参数不易确定,需要有套机制在运行过程中动态调整参数并且线程池运行过程中的各项指标一般无法感知。
可以在代码中创建了一个ThreadPoolExecutor,但是不确定核心参数设置多少比较合适;仅凭经验设置参数值,上线后如果发现需要调整,需要修改代码并重启服务;且线程池相对开发人员来说是黑盒,运行情况不能及时感知到。
发明内容
为此,本发明提供一种动态线程池内置监控告警的方法和装置,可以通过修改动态线程池的参数和监控动态线程池,实现对运行中线程池参数的动态修改且实时生效;实现实时监控线程池的运行状态,触发设置的报警策略时报警。
为实现以上目的,本发明采用如下技术方案:
第一方面,本发明提供一种动态线程池内置监控告警的方法,所述方法包括:
获取动态线程池的标识,根据所述标识确定所述动态线程池;修改所述动态线程池的参数,所述参数包括分片数、最大值、队列长度;监控所述动态线程池,根据所述动态线程池的负载触发告警。
进一步地,所述动态线程池支持线程池参数动态修改,包括修改所述线程池核心、最大核心、队列长度,且参数修改及时生效。
进一步地,所述动态线程池支持应用粒度、线程池粒度、任务粒度的事务监控。
进一步地,所述方法还包括:
所述动态线程池调用第一方法设置第一线程池核心值,并覆盖原第二线程池核心值;若第一线程池核心值小于第二线程池核心值,向所述动态线程池当前空闲的工作线程发起中断请求并回收所述工作线程;若第一线程池核心值大于第二线程池核心值且当前队列存在有待执行的队列任务,则所述动态线程池创建新的工作线程以执行所述队列任务。
进一步地,所述监控所述动态线程池,根据所述动态线程池的负载触发告警,包括:
监控所述动态线程池的核心参数、活跃度、队列容量、拒绝策略、任务执行超时和任务排队超时;根据所述动态线程池的核心参数、活跃度、队列容量、拒绝策略、任务执行超时和任务排队超时是否达到预设阈值确定触发告警。
进一步地,所述根据所述动态线程池的活跃度和队列容量是否达到预设阈值确定发出告警,包括:
开启定时监控任务,每隔预设时间计算线程池的活跃度和任务队列的使用率;当所述活跃度和任务队列的使用率达到预设阈值则触发告警,其中告警间隔内多次触发不发送告警通知。
进一步地,所述根据所述拒绝策略是否达到预设阈值确定发出告警,包括:
调用第二方法执行拒绝数量累加,其中包括总数值累加和周期值累加,得到周期累加值;当所述周期累加值达到预设阈值,则触发告警通知,并重置所述周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
进一步地,所述根据所述任务执行超时是否达到预设阈值确定发出告警,包括:
重写第三方法,若已配置所述任务执行超时或任务排队超,则包装任务,并记录所述任务的提交时间;获取当前时间,根据所述当前时间和所述提交时间的差值,得到所述任务在队列中的等待时间;若所述等待时间大于预设阈值则累加排队超时任务数量,且若周期累加值达到预设阈值,则触发告警通知,并重置所述周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
进一步地,所述根据所述任务排队超时是否达到预设阈值确定发出告警,包括:
重写第四方法,获取当前时间和开始时间;根据所述当前时间和所述开始时间的差值,得到任务的执行时间;若所述执行时间大于预设阈值则累加排队超时任务数量,且若周期累加值达到预设阈值,则触发告警通知,并重置所述周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
第二方面,本发明提供一种动态线程池内置监控告警的装置,所述装置包括:
配置变更监听模块,用于监听配置中心的配置文件;
线程池管理模块,用于接收配置监听模块的刷新事件,实现线程池参数的刷新;
监控模块,用于监控指标采集和输出;
通知告警模块,用于对接办公平台,发送通知告警。
本发明采用以上技术方案,至少具备以下有益效果:
通过本发明方案,获取动态线程池的标识,根据所述标识确定所述动态线程池;修改所述动态线程池的参数,所述参数包括分片数、最大值、队列长度;监控所述动态线程池,根据所述动态线程池的负载触发告警。可以实现对运行中线程池参数的动态修改且实时生效;实现实时监控线程池的运行状态,触发设置的报警策略时报警。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的动态线程池内置监控告警的架构的示意图。
图2是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图3是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图4是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图5是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图6是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图7是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图8是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图9是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。
图10是根据一示例性实施例示出的一种动态线程池内置监控告警的装置框图100。
图11为本发明实施例电子设备一个应用实施例的结构示意图。
图12示出了本公开的电子设备的一个实施例的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
各行业快速发展,数据量千万计,在Java开发中,欲提高系统性能,线程池已经是必选的基础工具。项目中可能会创建很多线程池,既有IO密集型的,也有CPU密集型的,但线程池的参数不易确定,需要有套机制在运行过程中动态调整参数并且线程池运行过程中的各项指标一般无法感知。
可以在代码中创建了一个ThreadPoolExecutor,但是不确定核心参数设置多少比较合适;仅凭经验设置参数值,上线后如果发现需要调整,需要修改代码并重启服务;且线程池相对开发人员来说是黑盒,运行情况不能及时感知到。
本公开提供的实施例应用于动态线程池内置监控告警等场景。
图1是本公开实施例提供的动态线程池内置监控告警的架构的示意图。如图1所示,系统架构包括申请线程池、参数调整、监控范围和告警。配置管理包括新增产品线、新增线程池、配置队列、修改核心数、修改最大数和修改队列长度。监控告警模块包括线程池监控、线程任务监控、过载告警和变更告警。日志包含参数变更日志。配置管理和监控告警可修改权限控制。
请参阅图2,图2是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S11、获取动态线程池的标识,根据标识确定动态线程池;
步骤S12、修改动态线程池的参数,参数包括分片数、最大值、队列长度;
步骤S13、监控动态线程池,根据动态线程池的负载触发告警。
本公开实施例中,获取动态线程池的标识,根据标识确定动态线程池;修改动态线程池的参数,参数包括分片数、最大值、队列长度;监控动态线程池,根据动态线程池的负载触发告警。
本公开实施例中,动态化线程池包括以下功能:
动态调参,支持线程池参数动态调整、界面化操作;包括修改线程池核心大小、最大核心大小、队列长度等;参数修改后及时生效。
任务监控,支持应用粒度、线程池粒度、任务粒度的Transaction监控;可以看到线程池的任务执行情况、最大任务执行时间、平均任务执行时间、95/99线等。
负载告警,线程池队列任务积压到一定值的时候会通过通讯工具告知应用开发人员;当线程池负载数达到一定阈值的时候会通过通讯工具告知应用开发人员。
操作监控,创建/修改和删除线程池都会通知到应用的开发人员。
操作日志,可以查看线程池参数的修改记录,在什么时间修改了线程池参数、修改前的参数值是什么。
权限校验:只有应用开发人员才能够修改应用的线程池参数。
本公开实施例中,动态可监控线程池具有以下特性。代码零侵入,所有配置都放在配置中心,对业务代码零侵入。轻量简单,基于Titans实现,引入starter,接入只需简单步骤即可完成。高可扩展,框架核心功能提供串行外设接口(Serial Peripheral Interface,SPI)接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)。多平台通知报警,提供多种报警维度(配置变更通知、活性报警、容量阈值报警、拒绝触发报警、任务执行或等待超时报警),同时提供SPI接口可自定义扩展实现。监控,定时采集线程池指标数据,支持通过JsonLog日志输出,可通过SPI接口自定义扩展实现。任务增强,提供任务包装功能,实现TaskWrapper接口,如BasicProcessor(基础任务处理器开发)、BatchProcessor(批处理任务处理器开发),也可以支持线程池上下文信息传递。
本公开实施例中,动态线程池支持线程池参数动态修改,包括修改线程池核心、最大核心、队列长度,且参数修改及时生效。
本公开实施例中,动态线程池支持应用粒度、线程池粒度、任务粒度的事务监控。
请参阅图3,图3是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S21、动态线程池调用第一方法设置第一线程池核心值,并覆盖原第二线程池核心值;
步骤S22a、若第一线程池核心值小于第二线程池核心值,向动态线程池当前空闲的工作线程发起中断请求并回收工作线程;
步骤S22b、若第一线程池核心值大于第二线程池核心值且当前队列存在有待执行的队列任务,则动态线程池创建新的工作线程以执行队列任务。
本公开实施例中,JDK(Java Development Kit)允许线程池使用方通过ThreadPoolExecutor的实例来动态设置线程池的核心策略,以setCorePoolSize为方法例,在运行期线程池使用方调用此方法设置corePoolSize之后,线程池会直接覆盖原来的corePoolSize值,并且基于当前值和原始值的比较结果采取不同的处理策略。对于当前值小于当前工作线程数的情况,说明有多余的worker线程,此时会向当前idle的worker线程发起中断请求以实现回收,多余的worker在下次idle的时候也会被回收;对于当前值大于原始值且当前队列中有待执行任务,则线程池会创建新的worker线程来执行队列任务。
本公开实施例中,线程池内部会处理当前状态做到平滑修改,基于几个public方法,只需要维护ThreadPoolExecutor的实例,并且在需要修改时拿到实例修改其参数即可。基于以上的思路,实现了线程池参数的动态化、线程池参数在管理平台可配置可修改。
本公开实施例中,用户可在管理平台上通过线程池的名字找到指定的线程池,然后对其参数进行修改,保存后会实时生效。目前支持的动态参数包括分片数、最大值、队列长度等。除此之外,在界面中,还能看到用户可以配置是否开启告警、队列等待任务告警阈值、活跃度告警等。
请参阅图4,图4是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S31、监控动态线程池的核心参数、活跃度、队列容量、拒绝策略、任务执行超时和任务排队超时;
步骤S32、根据动态线程池的核心参数、活跃度、队列容量、拒绝策略、任务执行超时和任务排队超时是否达到预设阈值确定触发告警。
本发明提供以下告警功能,每一个告警项都可以独立配置是否开启、告警阈值、告警间隔时间、平台等,告警信息同时会高亮与该项相关的字段。告警包括核心参数变更通知、线程池活跃度告警、队列容量告警、拒绝策略告警、任务执行超时告警和任务排队超时告警。
请参阅图5,图5是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S41、开启定时监控任务,每隔预设时间计算线程池的活跃度和任务队列的使用率;
步骤S42、当活跃度和任务队列的使用率达到预设阈值则触发告警,其中告警间隔内多次触发不发送告警通知。
本公开实施例中,活跃度=activeCount/maximumPoolSize。服务启动后会开启一个定时监控任务,每隔一定时间(可配置)去计算线程池的活跃度,达到配置的threshold阈值后会触发一次告警,告警间隔内多次触发不会发送告警通知。
本公开实施例中,容量使用率=queueSize/queueCapacity。服务启动后会开启一个定时监控任务,每隔一定时间去计算任务队列的使用率,达到配置的threshold阈值后会触发一次告警,告警间隔内多次触发不会发送告警通知。
请参阅图6,图6是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S51、调用第二方法执行拒绝数量累加,其中包括总数值累加和周期值累加,得到周期累加值;
步骤S52、当周期累加值达到预设阈值,则触发告警通知,并重置周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
本公开实施例中,线程池线程数达到配置的最大线程数,且任务队列已满,再提交任务会触发拒绝策略。DtpExecutor线程池用到RejectedExecutionHandler经过动态代理包装过,在执行具体的拒绝策略之前会执行RejectedAware类beforeReject()方法,此方法会去做拒绝数量累加(总数值累加、周期值累加)。且判断如果周期累计值达到配置的阈值,则会触发一次告警通知(同时重置周期累加值为0及上次告警时间为当前时间),告警间隔内多次触发不会发送告警通知。
请参阅图7,图7是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S61、重写第三方法,若已配置任务执行超时或任务排队超,则包装任务,并记录任务的提交时间;
步骤S62、获取当前时间,根据当前时间和提交时间的差值,得到任务在队列中的等待时间;
步骤S63、若等待时间大于预设阈值则累加排队超时任务数量,且若周期累加值达到预设阈值,则触发告警通知,并重置周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
本公开实施例中,重写ThreadPoolExecutor的execute()方法和beforeExecute()方法,如果配置了执行超时或排队超时值,则会用DtpRunnable包装任务,同时记录任务的提交时间submitTime,beforeExecute根据当前时间和提交时间的差值就可以计算到该任务在队列中的等待时间,然后判断如果差值大于配置的queueTimeout则累加排队超时任务数量(总数值累加、周期值累加)。且判断如果周期累计值达到配置的阈值,则会触发一次告警通知(同时重置周期累加值为0及上次告警时间为当前时间),告警间隔内多次触发不会发送告警通知。
请参阅图8,图8是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图,该方法包括如下步骤:
步骤S71、重写第四方法,获取当前时间和开始时间;
步骤S72、根据当前时间和开始时间的差值,得到任务的执行时间;
步骤S73、若执行时间大于预设阈值则累加排队超时任务数量,且若周期累加值达到预设阈值,则触发告警通知,并重置周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
本公开实施例中,重写ThreadPoolExecutor的afterExecute()方法,根据当前时间和beforeExecute()中设置的startTime的差值即可算出任务的实际执行时间,然后判断如果差值大于配置的runTimeout则累加排队超时任务数量(总数值累加、周期值累加)。且判断如果周期累计值达到配置的阈值,则会触发一次告警通知(同时重置周期累加值为0及上次告警时间为当前时间),告警间隔内多次触发不会发送告警通知。
图9是根据一示例性实施例示出的一种动态线程池内置监控告警的方法的流程图。如图9所示,JDK允许线程池使用方通过ThreadPoolExecutor的实例来动态设置线程池的核心策略,以setCorePoolSize为方法例,在运行期线程池使用方调用此方法设置corePoolSize之后,线程池会直接覆盖原来的corePoolSize值,并且基于当前值和原始值的比较结果采取不同的处理策略。对于当前值小于当前工作线程数的情况,说明有多余的worker线程,此时会向当前idle的worker线程发起中断请求以实现回收,多余的worker在下次idle的时候也会被回收;对于当前值大于原始值且当前队列中有待执行任务,则线程池会创建新的worker线程来执行队列任务。
通过本发明方案,获取动态线程池的标识,根据所述标识确定所述动态线程池;修改所述动态线程池的参数,所述参数包括分片数、最大值、队列长度;监控所述动态线程池,根据所述动态线程池的负载触发告警。可以实现对运行中线程池参数的动态修改且实时生效;实现实时监控线程池的运行状态,触发设置的报警策略时报警。
图10是根据一示例性实施例示出的一种动态线程池内置监控告警的装置框图100。参照图10,该装置包括配置变更监听模块101、线程池管理模块102、监控模块103和通知告警模块104。
配置变更监听模块101,用于监听配置中心的配置文件;
线程池管理模块102,用于接收配置监听模块的刷新事件,实现线程池参数的刷新;
监控模块103,用于监控指标采集和输出;
通知告警模块104,用于对接办公平台,发送通知告警。
本公开实施例中,配置变更监听模块,监听特定配置中心的指定配置文件(已实现titans、Apollo、Zookeeper),可通过内部提供的SPI接口扩展其他实现。解析配置文件内容,内置实现yml、properties、json配置文件的解析,可通过内部提供的SPI接口扩展其他实现。通知线程池管理模块实现参数的刷新。
本公开实施例中,服务内部线程池管理模块,服务启动时从配置中心拉取配置,生成线程池实例注册到内部线程池注册中心以及Spring容器中。接受配置监听模块的刷新事件,实现线程池参数的刷新。代码中通过依赖注入或者DtpRegistry.getExecutor()方法根据线程池名称来获取线程池实例。
本公开实施例中,三方组件线程池管理。服务启动获取第三方中间件的线程池,通过框架管理。接受参数刷新、指标收集、通知报警事件,进行相应的处理。
本公开实施例中,监控模块实现监控指标采集以及输出,默认提供以下三种方式,也可通过内部提供的SPI接口扩展其他实现。默认实现JsonLog输出到磁盘,可以采集解析日志,存储展示。
本公开实施例中,通知告警模块对接办公平台,实现通知告警功能,通知告警类型包括线程池主要参数变更通知、阻塞队列容量达到设置的告警阈值、线程池活性达到设置的告警阈值、触发拒绝策略告警,格式:A/B,A:该报警项前后两次报警区间累加数量,B:该报警项累计总数。任务执行超时告警,格式:A/B,A:该报警项前后两次报警区间累加数量,B:该报警项累计总数。任务等待超时告警,格式:A/B,A:该报警项前后两次报警区间累加数量,B:该报警项累计总数。
图11为本发明实施例电子设备一个应用实施例的结构示意图。下面参考图11,其示出了适于用来实现本发明实施例的终端设备或服务器的电子设备的结构示意图。如图11所示,该电子设备包括存储器,用于存储计算机程序以及一个或多个处理器,用于执行存储器中存储的计算机程序。在一例中,存储器可以是只读存储器(ROM)和/或随机访问存储器(RAM)。
在一例中,一个或多个处理器可以是一个或多个中央处理单元(CPU),和/或一个或多个图像处理器(GPU)等,处理器可以根据存储在ROM中的可执行指令或者从存储部分加载到RAM中的可执行指令而执行各种适当的动作和处理。在一例中,电子设备还可以包括通信部,通信部可包括但不限于网卡,网卡可包括但不限于IB(Infiniband)网卡,处理器可与ROM和/或RAM中通信以执行可执行指令,通过总线与通信部相连、并经通信部与其他目标设备通信,从而完成本发明实施例提供的任一方法对应的操作。
此外,在RAM中,还可存储有装置操作所需的各种程序和数据。CPU、ROM以及RAM通过总线彼此相连。在有RAM的情况下,ROM为可选模块。RAM存储可执行指令,或在运行时向ROM中写入可执行指令,可执行指令使处理器执行本发明上述任一方法对应的操作。输入/输出(I/O)接口也连接至总线。通信部可以集成设置,也可以设置为具有多个子模块(例如多个IB网卡),并在总线链接上。
以下部件连接至I/O接口:包括键盘、鼠标等的输入部分;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分;包括硬盘等的存储部分;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分。通信部分经由诸如因特网的网络执行通信处理。驱动器也根据需要连接至I/O接口。可拆卸介质,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器上,以便于从其上读出的计算机程序根据需要被安装入存储部分。
需要说明的,如图11所示的架构仅为一种可选实现方式,在具体实践过程中,可根据实际需要对上述图11的部件数量和类型进行选择、删减、增加或替换;在不同功能部件设置上,也可采用分离设置或集成设置等实现方式,例如GPU和CPU可分离设置或者可将GPU集成在CPU上,通信部可分离设置,也可集成设置在CPU或GPU上,等等。这些可替换的实施方式均落入本发明公开的保护范围。
图12示出了本公开的电子设备的一个实施例的结构示意图。下面参考图10,其示出了适于用来实现本发明实施例的终端设备或服务器的电子设备的结构示意图。如图12所示,该电子设备该电子设备包括处理器和存储器。电子设备也可以包括输入输出装置。存储器、输入输出装置均通过总线与处理器连接。其中,存储器,用于存储处理器执行的指令;处理器,用于调用存储器存储的指令,并执行上述实施例涉及的一种动态线程池内置监控告警的方法。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在计算机上运行时,执行上述实施例涉及的一种动态线程池内置监控告警的方法。
本公开实施例还提供一种包含指令的计算机程序产品,当包含指令的计算机程序产品在计算机上运行时,使得计算机执行上述实施例涉及的一种动态线程池内置监控告警的方法。
在一个或多个可选实施方式中,本公开实施例还提供了一种计算机可读存储介质,用于存储计算机可读指令,该指令被执行时使得计算机执行上述任一可能的实现方式中的一种动态线程池内置监控告警的方法。在另一个可选例子中,该计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
尽管在附图中以特定的顺序描述操作,但是不应将其理解为要求按照所示的特定顺序或是串行顺序来执行这些操作,或是要求执行全部所示的操作以得到期望的结果。在特定环境中,多任务和并行处理可能是有利的。
本公开的方法和装置能够利用标准编程技术来完成,利用基于规则的逻辑或者其他逻辑来实现各种方法步骤。还应当注意的是,此处以及权利要求书中使用的词语“装置”和“模块”意在包括使用一行或者多行软件代码的实现和/或硬件实现和/或用于接收输入的设备。
此处描述的任何步骤、操作或程序可以使用单独的或与其他设备组合的一个或多个硬件或软件模块来执行或实现。在一个实施方式中,软件模块使用包括包含计算机程序代码的计算机可读介质的计算机程序产品实现,其能够由计算机处理器执行用于执行任何或全部的所描述的步骤、操作或程序。
出于示例和描述的目的,已经给出了本公开实施的前述说明。前述说明并非是穷举性的也并非要将本公开限制到所公开的确切形式,根据上述教导还可能存在各种变形和修改,或者是可能从本公开的实践中得到各种变形和修改。选择和描述这些实施例是为了说明本公开的原理及其实际应用,以使得本领域的技术人员能够以适合于构思的特定用途来以各种实施方式和各种修改而利用本公开。
可以理解的是,本公开中“多个”是指两个或两个以上,其它量词与之类似。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
进一步可以理解的是,术语“第一”、“第二”等用于描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开,并不表示特定的顺序或者重要程度。实际上,“第一”、“第二”等表述完全可以互换使用。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。
进一步可以理解的是,除非有特殊说明,“连接”包括两者之间不存在其他构件的直接连接,也包括两者之间存在其他元件的间接连接。
进一步可以理解的是,本公开实施例中尽管在附图中以特定的顺序描述操作,但是不应将其理解为要求按照所示的特定顺序或是串行顺序来执行这些操作,或是要求执行全部所示的操作以得到期望的结果。在特定环境中,多任务和并行处理可能是有利的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利范围来限制。
可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。
需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”、“多”的含义是指至少两个。
应该理解,当元件被称为“固定于”或“设置于”另一个元件,它可以直接在另一个元件上或者可能同时存在居中元件;当一个元件被称为“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件,此外,这里使用的“连接”可以包括无线连接;使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为:表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种动态线程池内置监控告警的方法,其特征在于,所述方法包括:
获取动态线程池的标识,根据所述标识确定所述动态线程池;
修改所述动态线程池的参数,所述参数包括分片数、最大值、队列长度;
监控所述动态线程池,根据所述动态线程池的负载触发告警。
2.根据权利要求1所述的方法,其特征在于,所述动态线程池支持线程池参数动态修改,包括修改所述线程池核心、最大核心、队列长度,且参数修改及时生效。
3.根据权利要求1所述的方法,其特征在于,所述动态线程池支持应用粒度、线程池粒度、任务粒度的事务监控。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述动态线程池调用第一方法设置第一线程池核心值,并覆盖原第二线程池核心值;
若第一线程池核心值小于第二线程池核心值,向所述动态线程池当前空闲的工作线程发起中断请求并回收所述工作线程;
若第一线程池核心值大于第二线程池核心值且当前队列存在有待执行的队列任务,则所述动态线程池创建新的工作线程以执行所述队列任务。
5.根据权利要求1所述的方法,其特征在于,所述监控所述动态线程池,根据所述动态线程池的负载触发告警,包括:
监控所述动态线程池的核心参数、活跃度、队列容量、拒绝策略、任务执行超时和任务排队超时;
根据所述动态线程池的核心参数、活跃度、队列容量、拒绝策略、任务执行超时和任务排队超时是否达到预设阈值确定触发告警。
6.根据权利要求5所述的方法,其特征在于,所述根据所述动态线程池的活跃度和队列容量是否达到预设阈值确定发出告警,包括:
开启定时监控任务,每隔预设时间计算线程池的活跃度和任务队列的使用率;
当所述活跃度和任务队列的使用率达到预设阈值则触发告警,其中告警间隔内多次触发不发送告警通知。
7.根据权利要求5所述的方法,所述根据所述拒绝策略是否达到预设阈值确定发出告警,包括:
调用第二方法执行拒绝数量累加,其中包括总数值累加和周期值累加,得到周期累加值;
当所述周期累加值达到预设阈值,则触发告警通知,并重置所述周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
8.根据权利要求5所述的方法,所述根据所述任务执行超时是否达到预设阈值确定发出告警,包括:
重写第三方法,若已配置所述任务执行超时或任务排队超,则包装任务,并记录所述任务的提交时间;
获取当前时间,根据所述当前时间和所述提交时间的差值,得到所述任务在队列中的等待时间;
若所述等待时间大于预设阈值则累加排队超时任务数量,且若周期累加值达到预设阈值,则触发告警通知,并重置所述周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
9.根据权利要求5所述的方法,所述根据所述任务排队超时是否达到预设阈值确定发出告警,包括:
重写第四方法,获取当前时间和开始时间;
根据所述当前时间和所述开始时间的差值,得到任务的执行时间;
若所述执行时间大于预设阈值则累加排队超时任务数量,且若周期累加值达到预设阈值,则触发告警通知,并重置所述周期累加值为0及上次告警时间为当前时间,其中告警间隔内多次触发不发送告警通知。
10.一种动态线程池内置监控告警的装置,其特征在于,所述装置包括:
配置变更监听模块,用于监听配置中心的配置文件;
线程池管理模块,用于接收配置监听模块的刷新事件,实现线程池参数的刷新;
监控模块,用于监控指标采集和输出;
通知告警模块,用于对接办公平台,发送通知告警。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310423429.0A CN116560834A (zh) | 2023-04-19 | 2023-04-19 | 一种动态线程池内置监控告警的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310423429.0A CN116560834A (zh) | 2023-04-19 | 2023-04-19 | 一种动态线程池内置监控告警的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116560834A true CN116560834A (zh) | 2023-08-08 |
Family
ID=87489022
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310423429.0A Pending CN116560834A (zh) | 2023-04-19 | 2023-04-19 | 一种动态线程池内置监控告警的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116560834A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149582A (zh) * | 2023-10-26 | 2023-12-01 | 井芯微电子技术(天津)有限公司 | 伪线程调度监控告警方法、装置、电子设备及存储介质 |
CN117215800A (zh) * | 2023-11-07 | 2023-12-12 | 北京大数据先进技术研究院 | 一种动态线程控制系统 |
-
2023
- 2023-04-19 CN CN202310423429.0A patent/CN116560834A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149582A (zh) * | 2023-10-26 | 2023-12-01 | 井芯微电子技术(天津)有限公司 | 伪线程调度监控告警方法、装置、电子设备及存储介质 |
CN117149582B (zh) * | 2023-10-26 | 2024-01-23 | 井芯微电子技术(天津)有限公司 | 伪线程调度监控告警方法、装置、电子设备及存储介质 |
CN117215800A (zh) * | 2023-11-07 | 2023-12-12 | 北京大数据先进技术研究院 | 一种动态线程控制系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116560834A (zh) | 一种动态线程池内置监控告警的方法和装置 | |
US9893963B2 (en) | Dynamic baseline determination for distributed transaction | |
US7383470B2 (en) | Method, system, and apparatus for identifying unresponsive portions of a computer program | |
US20180336060A1 (en) | Method, terminal and storage medium for displaying media files | |
US10230611B2 (en) | Dynamic baseline determination for distributed business transaction | |
EP2503733A1 (en) | Data collecting method, data collecting apparatus and network management device | |
US10831565B2 (en) | Fault tolerant adapter system to consume database as a service | |
CN109144862A (zh) | 测试数据的统计方法、装置、计算机设备及存储介质 | |
CN108509313A (zh) | 一种业务监控方法、平台及存储介质 | |
CN111538585A (zh) | 一种基于node.js的服务器进程调度方法、系统和装置 | |
CN114090198A (zh) | 分布式任务调度方法、装置、电子设备及存储介质 | |
CN112363841B (zh) | 应用进程的查杀方法、装置、电子设备及存储介质 | |
CN113608982A (zh) | 函数执行性能监测方法、装置、计算机设备及存储介质 | |
JP2011526121A (ja) | 監視システムにおけるメッセージの対象とされたユーザへの通知 | |
CA2365427A1 (en) | Internal product fault monitoring apparatus and method | |
CN112711515A (zh) | 一种实时监控方法、装置及电子设备 | |
CN112099858B (zh) | 系统数据处理逻辑更新方法、装置和数据处理系统 | |
CN115061796A (zh) | 子任务之间调用的执行方法、系统及电子设备 | |
CN110764974B (zh) | 一种监控方法、装置及存储介质 | |
CN112817727A (zh) | 基于微服务架构的任务管理方法、系统、设备和存储介质 | |
CN110837433A (zh) | 性能优化方法、装置及电子设备 | |
JP2013003896A (ja) | 情報提供装置、情報提供方法およびプログラム | |
CN114443429B (zh) | 一种告警事件的处理方法、装置及计算机可读存储介质 | |
JP5459797B2 (ja) | 監視装置、監視方法、及びプログラム | |
CN117290140A (zh) | 一种数据处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |