JAVA环境下异常业务线程检测与处理方法技术

技术编号:14771793 阅读:64 留言:0更新日期:2017-03-08 15:15
一种JAVA环境下异常业务线程检测与处理方法,包括如下步骤:创建一个独立的监控线程状态的线程,该线程由主程序定时启动,定时的时间间隔可根据实际业务分析,主要参考实际业务中单个任务执行的平均耗时,以不超过平均耗时为最大间隔时间。该线程的任务主要有以下几个步骤:步骤一:获取并保存所有工作线程的启动时间,用于计算线程当前的耗时;步骤二:识别异常线程;步骤三:处理异常线程。本发明专利技术中提出了一种JAVA环境下异常业务线程检测与处理方法,通过监控可以及早地发现问题和解决系统中存在的问题,提供及时的性能数据和健康状况,以便对系统进行优化或在必要时启动补救措施,降低事故和灾难所造成的影响。

【技术实现步骤摘要】

本专利技术涉及采用多线程技术的集群系统
,具体涉及一种JAVA环境下异常业务线程检测与处理方法
技术介绍
在一个实时处理任务的工作流系统中,为了提高整个系统的并发量,充分有效的利用资源,每个工作节点内部往往会采用多线程处理方式,多线程的优点是提高应用程序响应,使多处理器效率更高,然而多线程之间又存在资源共享,资源竞争的问题,如果某个线程占满了CPU、内存等必要资源,别的线程也不能正常处理任务,所以,为维持系统的及时流畅运行,要求每个工作线程必须保持稳定的吞吐量,可控的资源占用率,以相近的速率、流水线式的工作方式来处理单个任务。然而现实中实时请求的任务往往具有动态性,不可预测性,潜在不安全性等特征,每个工作线程的处理效率、占用资源情况、结果影响必定也不可预测,这种由有限个异常任务引起的整体性能下降,需要由开发人员对多线程系统进行监控。监控技术是一种在软件开发过程中广泛使用的技术,通过监控可以及早地发现问题和解决系统中存在的问题,提供及时的性能数据和健康状况,以便对系统进行优化或在必要时启动补救措施,降低事故和灾难所造成的影响。
技术实现思路
本专利技术的目的是针对现有的技术存在的不足,提出了一种工作效率高的JAVA环境下异常业务线程检测与处理方法。本专利技术所解决的技术问题采用以下技术方案来实现一种JAVA环境下异常业务线程检测与处理方法,包括如下步骤:步骤一:获取并保存所有工作线程的启动时间:JAVA环境下,每个线程都属于某个线程组,线程组表示一个线程的集合,线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组,通过最顶端的初始线程组可以获取程序中所有的线程,而最顶端的线程组可由当前线程向上回溯父线程,直到某个父线程的父线程为空,即可得到最顶端的线程组,一个工作节点程序包含多种业务线程,有创建工作线程的线程或有定时刷新缓存数据的线程,为识别需要的工作线程,可以在创建工作线程的同时为这种类型的线程取一个带有特殊前缀的名字,或者为实际工作的线程单独定义一种类型,通过这些特征过滤出需要关注的线程,程序需要定义一个全局Map来保存这些线程的启动时间,当此次检测到的线程为新开启的线程时,将当前时间作为启动时间与新线程的名字对应保存,保存完后,再从全局Map中除去已经完成任务的正常线程,保证Map不会无限增长;步骤二:识别异常线程:为保证工作节点的吞吐量,给每个线程设置一个最高运行耗时MaxTimeConsm(s/ms),循环上述步骤1的全局Map,用当前时间减去每个线程的启动时间,计算每个线程的当前耗时,当某个线程的耗时超过MaxTimeConsm,将该线程加入到疑似异常线程的队列中;步骤三:处理异常线程:当线程正在处理异常任务时,进程将呈现出频繁GC,单次GC的耗时较长,且老年代内存使用超过90%的状态,所以在处理异常线程队列之前,先获取当前线程所在进程的内存使用情况,检测点为最近一次GC时间、最近两次GC时间的间隔及当前进程的老年代内存情况,如果检测点都超过设定的阀值,则可证明当前耗时超长的线程中存在异常任务,后续则将异常线程队列中的任务转移到统一保存处以供后续分析处理,最后,将异常队列中的所有线程停止,使系统恢复稳定状态。本专利技术的有益效果为:提出了一种JAVA环境下异常业务线程检测与处理方法,通过监控可以及早地发现问题和解决系统中存在的问题,提供及时的性能数据和健康状况,以便对系统进行优化或在必要时启动补救措施,降低事故和灾难所造成的影响。具体实施方式本专利技术的多维特征组合逻辑检测方法包括以下步骤:创建一个独立的监控线程状态的线程,该线程由主程序定时启动,定时的时间间隔可根据实际业务分析,主要参考实际业务中单个任务执行的平均耗时,以不超过平均耗时为最大间隔时间。该线程的任务主要有以下几个步骤:步骤一:获取并保存所有工作线程的启动时间:JAVA环境下,每个线程都属于某个线程组,线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。通过最顶端的初始线程组可以获取程序中所有的线程,而最顶端的线程组可由当前线程向上回溯父线程,直到某个父线程的父线程为空,即可得到最顶端的线程组。一个工作节点程序包含多种业务线程,有创建工作线程的线程、有定时刷新缓存数据的线程等等,为了识别需要关注的工作线程,可以在创建工作线程时为这种类型的线程取一个带有特殊前缀的名字,或者为实际工作的线程单独定义一种类型,通过这些特征过滤出需要关注的线程。程序需要定义一个全局Map来保存这些线程的启动时间,当此次检测到的线程为新开启的线程时,将当前时间作为启动时间与新线程的名字对应保存,保存完后,再从全局Map中除去已经完成任务的正常线程,保证Map不会无限增长。步骤二:识别异常线程:为保证工作节点的吞吐量,给每个线程设置一个最高运行耗时MaxTimeConsm(s/ms),循环上述①中的全局Map,用当前时间减去每个线程的启动时间,计算每个线程的当前耗时,当某个线程的耗时超过MaxTimeConsm,将该线程加入到疑似异常线程的队列中;步骤三:处理异常线程:当线程正在处理异常任务时,进程将呈现出频繁GC,单次GC的耗时较长,且老年代内存使用超过90%的状态,所以在处理异常线程队列之前,先获取当前线程所在进程的内存使用情况,检测点为最近一次GC时间、最近两次GC时间的间隔及当前进程的老年代内存情况,如果检测点都超过设定的阀值,则可证明当前耗时超长的线程中存在异常任务,后续则将异常线程队列中的任务转移到统一保存处以供后续分析处理,最后,将异常队列中的所有线程停止,使系统恢复稳定状态。本专利技术提出了一种JAVA环境下异常业务线程检测与处理方法,通过监控可以及早地发现问题和解决系统中存在的问题,提供及时的性能数据和健康状况,以便对系统进行优化或在必要时启动补救措施,降低事故和灾难所造成的影响。所属领域的普通技术人员应当理解:以上,所述仅为本专利技术的具体实施例而已,并不用于限制本专利技术,凡在本专利技术的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本专利技术的保护范围之内。本文档来自技高网...

【技术保护点】
一种JAVA环境下异常业务线程检测与处理方法,其特征在于:包括如下步骤:步骤一:获取并保存所有工作线程的启动时间:JAVA环境下,每个线程都属于某个线程组,线程组表示一个线程的集合,线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组,通过最顶端的初始线程组可以获取程序中所有的线程,而最顶端的线程组可由当前线程向上回溯父线程,直到某个父线程的父线程为空,即可得到最顶端的线程组,一个工作节点程序包含多种业务线程,有创建工作线程的线程或有定时刷新缓存数据的线程,为识别需要的工作线程,可以在创建工作线程的同时为这种类型的线程取一个带有特殊前缀的名字,或者为实际工作的线程单独定义一种类型,通过这些特征过滤出需要关注的线程,程序需要定义一个全局Map来保存这些线程的启动时间,当此次检测到的线程为新开启的线程时,将当前时间作为启动时间与新线程的名字对应保存,保存完后,再从全局Map中除去已经完成任务的正常线程,保证Map不会无限增长;步骤二:识别异常线程:为保证工作节点的吞吐量,给每个线程设置一个最高运行耗时MaxTimeConsm(s/ms),循环上述步骤1的全局Map,用当前时间减去每个线程的启动时间,计算每个线程的当前耗时,当某个线程的耗时超过MaxTimeConsm,将该线程加入到疑似异常线程的队列中;步骤三:处理异常线程:当线程正在处理异常任务时,进程将呈现出频繁GC,单次GC的耗时较长,且老年代内存使用超过90%的状态,所以在处理异常线程队列之前,先获取当前线程所在进程的内存使用情况,检测点为最近一次GC时间、最近两次GC时间的间隔及当前进程的老年代内存情况,如果检测点都超过设定的阀值,则可证明当前耗时超长的线程中存在异常任务,后续则将异常线程队列中的任务转移到统一保存处以供后续分析处理,最后,将异常队列中的所有线程停止,使系统恢复稳定状态。...

【技术特征摘要】
1.一种JAVA环境下异常业务线程检测与处理方法,其特征在于:包括如下步骤:步骤一:获取并保存所有工作线程的启动时间:JAVA环境下,每个线程都属于某个线程组,线程组表示一个线程的集合,线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组,通过最顶端的初始线程组可以获取程序中所有的线程,而最顶端的线程组可由当前线程向上回溯父线程,直到某个父线程的父线程为空,即可得到最顶端的线程组,一个工作节点程序包含多种业务线程,有创建工作线程的线程或有定时刷新缓存数据的线程,为识别需要的工作线程,可以在创建工作线程的同时为这种类型的线程取一个带有特殊前缀的名字,或者为实际工作的线程单独定义一种类型,通过这些特征过滤出需要关注的线程,程序需要定义一个全局Map来保存这些线程的启动时间,当此次检测到的线程为新开启的线程时,将当前时间作为启动时间与新线程的名字对应保存,保存完后,再从全局...

【专利技术属性】
技术研发人员:涂君兰
申请(专利权)人:天津海量信息技术股份有限公司
类型:发明
国别省市:天津;12

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

1