业务运行异常监控方法、系统、设备及存储介质与流程

文档序号:32745643发布日期:2022-12-30 21:59阅读:53来源:国知局
业务运行异常监控方法、系统、设备及存储介质与流程

1.本发明涉及异常监控领域,尤其涉及一种业务运行异常监控方法、系统、设备及存储介质。


背景技术:

2.随着业务系统的可靠性运行要求越来越高,大多数的业务系统需要支持7*24小时不间断的稳定运行,各业务模块如存在系统异常则会阻断业务的运行,需人工确认异常的业务模块,短时间内可以通过重启进程来恢复业务。随着业务复杂性不断的增加,各业务模块之间需启用大量的多线程技术来处理业务,多线程在高并发时如处理业务异常时,有可能会造成线程的阻塞,进而导致业务中断,短时间内难以排查到具体问题,从而造成业务中断时间过长,造成不必要的损失。


技术实现要素:

3.本发明的主要目的在于提供一种业务运行异常监控方法、系统、设备及存储介质,旨在解决复杂业务系统发生业务异常时难以快速定位异常原因,进而导致业务中断时间过长的技术问题。
4.本发明第一方面提供了一种业务运行异常监控方法,应用于业务系统,所述业务系统包括监控模块、线程管理模块以及多个业务模块,所述业务运行异常监控方法包括:
5.在所述业务模块运行时,所述线程管理模块启动定时任务,并每隔第一预置时间将所述业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中;
6.所述线程管理模块基于所述监控模块分配的共享内存标识访问分配的共享内存,并将所述缓冲区中保存的所述进程结构信息和所述线程结构信息拷贝至所述共享内存中,其中,在所述共享内存内,各线程每执行一步,各线程对应计数器的计数值累加一次;
7.基于所述定时任务,每隔第二预置时间,所述监控模块从所述共享内存分别读取各业务模块对应进程的所有线程最新的第一计数值并与上一次读取的第二计数值进行比较,得到各线程对应的比较结果;
8.若至少存在一个线程对应的比较结果为计数值未发生变化,则所述监控模块确定对应业务模块运行异常,并对发生异常的业务模块进行异常处理。
9.可选的,在本发明第一方面的第一种实现方式中,所述进程结构信息包括:进程pid和进程名称,所述线程结构信息包括:线程id、线程名称、线程阻塞处理方式和线程计数器。
10.可选的,在本发明第一方面的第二种实现方式中,所述线程阻塞处理策略包括:重启进程、告警处理或忽略处理。
11.可选的,在本发明第一方面的第三种实现方式中,所述若至少存在一个线程对应的比较结果为计数值未发生变化,则所述监控模块确定对应业务模块运行异常,并对发生
异常的业务模块进行异常处理包括:
12.若至少存在一个线程对应的比较结果为计数值未发生变化,则所述监控模块记录计数值未发生变化的次数;
13.当计数值未发生变化的次数达到预置次数阈值时,所述监控模块确定对应业务模块运行异常;
14.所述监控模块采用预置线程阻塞处理策略,对发生异常的业务模块进行异常处理。
15.可选的,在本发明第一方面的第四种实现方式中,所述监控模块采用预置线程阻塞处理策略,对发生异常的业务模块进行异常处理包括:
16.若所述线程阻塞处理策略为告警处理,则所述监控模块以短信方式通知相关技术人员定位本次业务运行异常的原因;
17.若所述线程阻塞处理策略为忽略处理,则所述监控模块记录与本次业务运行异常相关的日志信息。
18.可选的,在本发明第一方面的第五种实现方式中,所述监控模块采用预置线程阻塞处理策略,对发生异常的业务模块进行异常处理包括:
19.若所述线程阻塞处理策略为重启进程,则所述监控模块记录与发生异常的业务模块相关的进程信息和线程信息;
20.所述监控模块根据所述进程信息,执行进程kill指令,以结束发生异常的业务模块的进程运行;
21.所述监控模块重启发生异常的业务模块,并在启动成功后,以短信方式通知相关技术人员对监控模块的日志进行分析排查。
22.可选的,在本发明第一方面的第六种实现方式中,所述业务运行异常监控方法还包括:
23.所述监控模块分别为每一个业务模块创建一个共享内存标识和一个定时任务,并为每个业务模块分配指定字节大小的共享内存;
24.当业务模块运行并启动任一新的线程时,所述线程管理模块为新启动的线程分配一个线程对象。
25.本发明第二方面提供了一种业务系统,所述业务系统包括:监控模块、线程管理模块以及多个业务模块;
26.所述线程管理模块用于在在所述业务模块运行时,启动定时任务,并每隔第一预置时间将所述业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中;基于所述监控模块分配的共享内存标识访问分配的共享内存,并将所述缓冲区中保存的所述进程结构信息和所述线程结构信息拷贝至所述共享内存中,其中,在所述共享内存内,各线程每执行一步,各线程对应计数器的计数值累加一次;
27.所述监控模块用于基于所述定时任务,每隔第二预置时间,从所述共享内存分别读取各业务模块对应进程的所有线程最新的第一计数值并与上一次读取的第二计数值进行比较,得到各线程对应的比较结果;若至少存在一个线程对应的比较结果为计数值未发生变化,则确定对应业务模块运行异常,并对发生异常的业务模块进行异常处理。
28.可选的,在本发明第二方面的第一种实现方式中,所述进程结构信息包括:进程
pid和进程名称,所述线程结构信息包括:线程id、线程名称、线程阻塞处理方式和线程计数器。
29.可选的,在本发明第二方面的第二种实现方式中,所述线程阻塞处理策略包括:重启进程、告警处理或忽略处理。
30.可选的,在本发明第二方面的第三种实现方式中,所述监控模块还用于:
31.若至少存在一个线程对应的比较结果为计数值未发生变化,则记录计数值未发生变化的次数;当计数值未发生变化的次数达到预置次数阈值时,确定对应业务模块运行异常;采用预置线程阻塞处理策略,对发生异常的业务模块进行异常处理。
32.可选的,在本发明第二方面的第四种实现方式中,所述监控模块还用于:若所述线程阻塞处理策略为告警处理,则以短信方式通知相关技术人员定位本次业务运行异常的原因;若所述线程阻塞处理策略为忽略处理,则记录与本次业务运行异常相关的日志信息。
33.可选的,在本发明第二方面的第五种实现方式中,所述监控模块还用于:若所述线程阻塞处理策略为重启进程,则记录与发生异常的业务模块相关的进程信息和线程信息;根据所述进程信息,执行进程kill指令,以结束发生异常的业务模块的进程运行;重启发生异常的业务模块,并在启动成功后,以短信方式通知相关技术人员对监控模块的日志进行分析排查。
34.可选的,在本发明第二方面的第六种实现方式中,所述监控模块还用于:分别为每一个业务模块创建一个共享内存标识和一个定时任务,并为每个业务模块分配指定字节大小的共享内存;所述线程管理模块还用于:当业务模块运行并启动任一新的线程时,为新启动的线程分配一个线程对象。
35.本发明第三方面提供了一种业务运行异常监控设备,包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述业务运行异常监控设备执行上述的业务运行异常监控方法。
36.本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的业务运行异常监控方法。
37.本发明提供的技术方案中,在复杂业务系统中增加监控模块,业务系统运行时,定时将各业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中,然后再从缓冲区拷贝至监控模块分配的共享内存中。监控模块则定时从分配的各共享内存中分别读取各业务模块对应进程的所有线程最新计数值并与上一次读取的计数值进行比较,以此监控各业务模块的业务线程的运行情况,当任一业务模块发生异常时,能够快速定位到具体业务模块并进行异常处理,从而在短时间内让业务恢复正常。
附图说明
38.图1为本发明业务系统中业务模块与监控模块之间的系统交互示意图;
39.图2为本发明实施例中业务运行异常监控方法的一个实施例示意图;
40.图3为本发明实施例中业务系统的一个实施例示意图;
41.图4为本发明实施例中业务运行异常监控设备的一个实施例示意图。
具体实施方式
42.本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
43.为便于更好理解本发明,下面对本发明涉及的技术术语进行简要说明。
44.(1)业务系统:泛指用于实现某类业务的系统,包含硬件和软件,比如票务系统、采购系统、支付服务系统等。
45.(2)业务模块:属于业务系统的子模块,用于实现业务系统的某个具体功能,比如票务系统包括售票模块、退票模块、支付模块、消息推送模块等,具体可以是业务系统的各种功能应用程序。
46.(3)线程管理模块:属于业务系统的子模块,用于实现对业务系统的各业务模块运行过程进行实时监控,以及获取业务模块运行时的进程信息和线程信息并写入共享内存;线程管理模块优选为包含有多种线程管理方法的类。
47.(4)共享内存:监控模块从业务系统运行内存中分别为每一业务模块分配独立的内存空间,用于存储业务模块运行时的进程信息和线程信息。
48.(5)缓冲区:由线程管理模块给每一业务模块定义一个缓冲区,存储空间与共享内存一样,用于临时存储业务模块运行时的进程信息和线程信息。
49.(6)监控模块:属于业务系统的子模块,用于读取共享内存中线程管理模块写入的进程信息和线程信息进行异常判断,并在监控到业务模块异常时自动进行异常排除处理。
50.(7)进程:是正在运行的程序的实例和程序的基本执行实体。业务模块运行产生一个或多个进程。
51.(8)线程:包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
52.如图1所示,图1为本发明业务系统中业务模块与监控模块之间的系统交互示意图。
53.本实施例中,业务系统包括业务模块1、业务模块2。。。。。。业务模块n,一共n个业务模块,监控模块分别为各业务模块分配一个共享内存以及定时任务,key1(key1_1、key1_2。。key1_s)表示共享内存1中存储的业务模块1的各线程计数器的值集合。
54.本实施例中,监控模块预先为共享内存中数据的存放定义两组数据结构:
55.数据结构一:存放业务模块的进程相关信息,包括进程pid和进程名称;
56.数据结构二:存放线程相关的信息,包括线程id、线程名称、线程阻塞处理方式和线程计数器。
57.其中,数据结构一占用的大小为36字节,数据结构二占用的大小为44字节。
58.此外,监控模块还为每个业务模块分配指定字节的共享内存(比如说分配1024字节),该分配的共享内存区域的存放规则为:前36字节存放进程的相关信息,包括进程pid和
进程名称。
59.业务模块运行并启动线程后,线程管理模块为该线程注册分配一个线程对象,线程管理模块基于该线程对象可实现对线程的管理,包括将业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中,以及将缓冲区中保存的进程结构信息和线程结构信息拷贝至共享内存中。
60.一个进程里面可以产有多个线程,每一个线程在执行前,线程管理模块都会注册并分配一个线程对象给每一个线程。线程管理模块预先分别为每一个业务模块定义一个与分配的共享内存一样大的缓冲区,线程管理模块在运行过程中将业务模块的进程结构信息和各线程结构信息按字节顺序进行转换后拷贝到该缓冲区。
61.本实施例中,业务模块新增共享内存的访问类,该访问类主要根据监控模块为其注册的共享内存标识来访问分配的内存区域。当业务模块的线程启用时,会在该分配的内存区域进行计数,线程业务每处理完一步后将计数器的值进行累加,直到线程业务处理完毕。
62.本实施例中,在现有业务系统中增加一个监控模块,监控模块为每个业务模块分配对应的共享内存标识,同时为每个业务模块设置对应的定时任务。定时任务启动后,监控模块每隔一段时间读取对业务模块的共享内存值进行业务运行状态监控,根据监控结果自动进行异常处理。比如监控到某个业务模块对应在共享内存的值没有发生改变,则确认该业务模块对应的业务线程阻塞,需重启该业务模块。
63.本实施例通过监控业务系统的每个业务模块中线程的业务执行情况,如果线程执行异常,则在短时间内自动重启发生异常的业务模块,无需人工干预,快速恢复业务,从而使业务系统的损失降到最低。
64.为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图2,本发明实施例中业务运行异常监控方法的一个实施例包括:
65.s201,在业务模块运行时,线程管理模块启动定时任务,并每隔第一预置时间将业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中;
66.在一实施例中,在步骤s201之前,监控模块分别为每一个业务模块创建一个共享内存标识和一个定时任务,并为每个业务模块分配指定字节大小的共享内存,其中,各业务模块对应的共享内容大小可以相同,也可以不同。业务模块引入共享内存的访问类,该访问类根据监控模块为业务模块注册的共享内存标识来访问分配的内存区域。
67.当业务模块运行并启动任一新的线程时,线程管理模块为新启动的线程分配一个线程对象。线程管理模块基于线程对象,对线程进行管理。
68.在业务模块运行时,线程管理模块启动定时任务,并每隔第一预置时间将业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中。
69.在一实施例中,进程结构信息包括:进程pid和进程名称,线程结构信息包括:线程id、线程名称、线程阻塞处理方式和线程计数器。
70.s202,线程管理模块基于监控模块分配的共享内存标识访问分配的共享内存,并将缓冲区中保存的进程结构信息和线程结构信息拷贝至共享内存中,其中,在共享内存内,各线程每执行一步,各线程对应计数器的计数值累加一次;
71.本实施例中,线程管理模块预先分别为每一个业务模块定义一个与分配的共享内
存一样大的缓冲区用于存放业务模块的进程结构信息和线程结构信息。为便于监控模块快速访问,线程管理模块基于监控模块分配的共享内存标识访问分配的共享内存,并将缓冲区中保存的进程结构信息和线程结构信息拷贝至共享内存中。
72.在每一业务模块对应的共享内存中定义了存放数据的两组数据结构:
73.数据结构一:存放业务模块的进程相关信息,包括进程pid和进程名称;
74.数据结构二:存放线程相关的信息,包括线程id、线程名称、线程阻塞处理方式和线程计数器。
75.其中,每一线程都定义有一个线程计数器,线程运行过程中每执行一步,线程计数器的计数值自动累加一次,因此,一段时间过后,如果某个线程的计数值未变化,则说明该线程运行异常。
76.s203,基于定时任务,每隔第二预置时间,监控模块从共享内存分别读取各业务模块对应进程的所有线程最新的第一计数值并与上一次读取的第二计数值进行比较,得到各线程对应的比较结果;
77.本实施例中,第一预置时间与第二预置时间的设置可以相同,也可以不同,比如线程管理模块每隔5s向共享内存写入一次数据,而监控模块每隔5s从共享内存读取一次数据。需要说明的是,写入数据的时间点与读取数据的时间点不能相同。定时任务中包含有线程管理模块写入数据的时间间隔以及监控模块读取数据的时间间隔。
78.在每一时间间隔,监控模块一次性从共享内存分别读取各业务模块对应进程的所有线程最新的第一计数值,然后再分别将各线程的第一计数值与上一次读取的第二计数值进行比较,得到各线程对应的比较结果。
79.s204,若至少存在一个线程对应的比较结果为计数值未发生变化,则监控模块确定对应业务模块运行异常,并对发生异常的业务模块进行异常处理。
80.本实施例中,计数值代表的是线程的运行状态,如果运行正常,则线程每执行一步,对应计数器的值累加一次,否则值不变。因此,在业务模块运行过程中,若监控模块相邻两次读取的同一线程的计数值未发生变化,则说明线程未执行新的代码,也即线程的运行受到阻塞,则监控模块确定对应业务模块运行异常。由于线程每一步的运行很快,也即正常情况下计数值的变化非常快,基于此,监控模块能够快速定位运行异常的业务模块。
81.在一实施例中,步骤s204具体包括:
82.若至少存在一个线程对应的比较结果为计数值未发生变化,则监控模块记录计数值未发生变化的次数;
83.当计数值未发生变化的次数达到预置次数阈值时,监控模块确定对应业务模块运行异常;
84.监控模块采用预置线程阻塞处理策略,对发生异常的业务模块进行异常处理。
85.可选的,线程阻塞处理策略包括:重启进程、告警处理或忽略处理。
86.处理方式一:若线程阻塞处理策略为告警处理,则监控模块以短信方式通知相关技术人员定位本次业务运行异常的原因;
87.处理方式二:若线程阻塞处理策略为忽略处理,则监控模块记录与本次业务运行异常相关的日志信息。
88.处理方式三:若线程阻塞处理策略为重启进程,则监控模块记录与发生异常的业
务模块相关的进程信息和线程信息;监控模块根据进程信息,执行进程kill指令,以结束发生异常的业务模块的进程运行;监控模块重启发生异常的业务模块,并在启动成功后,以短信方式通知相关技术人员对监控模块的日志进行分析排查。
89.本实施例中,在复杂业务系统中增加监控模块和线程管理模块,业务系统运行时,线程管理模块定时将各业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中,然后再从缓冲区拷贝至监控模块分配的共享内存中。监控模块则定时从分配的各共享内存中分别读取各业务模块对应进程的所有线程最新计数值并与上一次读取的计数值进行比较,以此监控各业务模块的业务线程的运行情况,当任一业务模块发生异常时,监控模块能够快速定位到具体业务模块并进行异常处理,从而在短时间内让业务恢复正常。
90.上面对本发明实施例中业务运行异常监控方法进行了描述,下面对本发明实施例中业务系统进行描述,请参阅图3,本发明实施例中业务系统一个实施例包括:
91.所述业务系统包括:监控模块301、线程管理模块302以及多个业务模块303;
92.所述线程管理模块302用于在在所述业务模块运行时,启动定时任务,并每隔第一预置时间将所述业务模块的进程结构信息和线程结构信息按字节顺序进行转换后写入预置缓冲区中;基于所述监控模块分配的共享内存标识访问分配的共享内存,并将所述缓冲区中保存的所述进程结构信息和所述线程结构信息拷贝至所述共享内存中,其中,在所述共享内存内,各线程每执行一步,各线程对应计数器的计数值累加一次;
93.所述监控模块301用于基于所述定时任务,每隔第二预置时间,从所述共享内存分别读取各业务模块对应进程的所有线程最新的第一计数值并与上一次读取的第二计数值进行比较,得到各线程对应的比较结果;若至少存在一个线程对应的比较结果为计数值未发生变化,则确定对应业务模块运行异常,并对发生异常的业务模块进行异常处理。
94.可选的,所述进程结构信息包括:进程pid和进程名称,所述线程结构信息包括:线程id、线程名称、线程阻塞处理方式和线程计数器。
95.可选的,所述线程阻塞处理策略包括:重启进程、告警处理或忽略处理。
96.可选的,所述监控模块还用于:
97.若至少存在一个线程对应的比较结果为计数值未发生变化,则记录计数值未发生变化的次数;当计数值未发生变化的次数达到预置次数阈值时,确定对应业务模块运行异常;采用预置线程阻塞处理策略,对发生异常的业务模块进行异常处理。
98.可选的,所述监控模块还用于:若所述线程阻塞处理策略为告警处理,则以短信方式通知相关技术人员定位本次业务运行异常的原因;若所述线程阻塞处理策略为忽略处理,则记录与本次业务运行异常相关的日志信息。
99.可选的,所述监控模块还用于:若所述线程阻塞处理策略为重启进程,则记录与发生异常的业务模块相关的进程信息和线程信息;根据所述进程信息,执行进程kill指令,以结束发生异常的业务模块的进程运行;重启发生异常的业务模块,并在启动成功后,以短信方式通知相关技术人员对监控模块的日志进行分析排查。
100.可选的,所述监控模块还用于:分别为每一个业务模块创建一个共享内存标识和一个定时任务,并为每个业务模块分配指定字节大小的共享内存;所述线程管理模块还用于:当业务模块运行并启动任一新的线程时,为新启动的线程分配一个线程对象。
101.图4是本发明实施例提供的一种业务运行异常监控设备的结构示意图,该业务运行异常监控设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,cpu)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对业务运行异常监控设备500中的一系列指令操作。更进一步地,处理器510可以设置为与存储介质530通信,在业务运行异常监控设备500上执行存储介质530中的一系列指令操作。
102.业务运行异常监控设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如windows serve,mac os x,unix,linux,freebsd等等。本领域技术人员可以理解,图4示出的业务运行异常监控设备结构并不构成对业务运行异常监控设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
103.本发明还提供一种业务运行异常监控设备,所述业务运行异常监控设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述各实施例中的所述业务运行异常监控方法的步骤。
104.本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述业务运行异常监控方法的步骤。
105.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
106.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
107.以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1