一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

故障定位方法、装置、电子设备、介质及程序产品与流程

2022-03-05 04:09:30 来源:中国专利 TAG:


1.本公开实施例涉及计算机技术领域,具体涉及一种故障定位方法、装置、电子设备、介质及程序产品。


背景技术:

2.在一个业务系统的客户较多的情况下,业务系统出现一点微小的故障都有可能在瞬间影响数以万计的客户。因此,为了避免业务系统出现故障影响客户,业务系统需要在出现故障的时候能够快速实现自愈。为了使业务系统在出现故障的时候能够快速实现自愈,需要对故障进行定位,确定故障出现的位置,这样在业务系统出现故障时,就可以将确定到的故障位置通知给对应的技术人员,以便技术人员及时进行故障排除。
3.为了确定出现故障的具体位置,目前可以采用埋点的方式进行监控。埋点指的是在应用程序中插入输出语句。程序在运行到该输出语句时,可以输出预设字符。如果监测到预设字符,则说明输出语句前的程序并无问题。如此,可以确定程序中出现故障的位置。但是,埋点这种技术方案仅能确定两个埋点之间的程序是否出现故障。为了确定程序中各个函数的运行情况,需要在任意两个函数之间进行埋点。那么,当业务系统的体量较大时,需要埋点的数量大幅度增加,对代码的修改量较大,也会给服务器带来额外的负担。


技术实现要素:

4.为了解决相关技术中的问题,本公开实施例提供一种故障定位方法、装置、电子设备、介质及程序产品。
5.第一方面,本公开实施例中提供了一种故障定位方法。
6.具体的,所述故障定位方法,包括:
7.在监测到第一埋点对应的第一埋点输出信息后,监测第二埋点对应的第二埋点输出信息,所述第二埋点位于当前运行的程序中所述第一埋点位置之后的相邻埋点位置处,所述当前运行的程序在所述第一埋点和所述第二埋点之间有至少两个函数;
8.在第一预设时长内未监测到所述第二埋点输出信息时,获取所述第一埋点和所述第二埋点之间的各个待监测函数的标识;
9.获取当前正在执行的至少一个线程中正在调用的调用函数的标识;
10.基于所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数确定为故障函数。
11.结合第一方面,本公开实施例在第一方面的第一种实现方式中,所述方法还包括:
12.根据历史故障信息和系统中服务器的负载能力,确定各埋点位置;
13.在所述各埋点位置设置对应的埋点代码。
14.结合第一方面和第一方面的第一种实现方式,本公开实施例在第一方面的第二种实现方式中,所述方法还包括:
15.在监测到第一埋点对应的第一埋点输出信息后,删除所述第一埋点输出信息。
16.结合第一方面、第一方面的上述实现方式,本公开在第一方面的第三种实现方式中,其中,所述获取当前正在执行的至少一个线程中正在调用的调用函数的标识,包括:
17.获取线程列表,所述线程列表包括至少一个正在执行的线程;
18.获取所述至少一个正在执行的线程的方法栈;
19.基于所述方法栈的栈顶的函数信息,得到所述调用函数的标识。
20.结合第一方面、第一方面的上述实现方式,本公开在第一方面的第四种实现方式中,其中,所述方法还包括:
21.根据所述第一埋点和第二埋点之间的历史正常运行时长,确定所述第一预设时长。
22.第二方面,本公开实施例中提供了一种故障定位装置。
23.具体的,所述故障定位装置,包括:
24.监测模块,被配置为在监测到第一埋点对应的第一埋点输出信息后,监测第二埋点对应的第二埋点输出信息,所述第二埋点位于当前运行的程序中所述第一埋点位置之后的相邻埋点位置处,所述当前运行的程序在所述第一埋点和所述第二埋点之间有至少两个函数;
25.第一获取模块,被配置为在第一预设时长内未监测到所述第二埋点输出信息时,获取所述第一埋点和所述第二埋点之间的各个待监测函数的标识;
26.第二获取模块,被配置为获取当前正在执行的至少一个线程中正在调用的调用函数的标识;
27.第一确定模块,被配置为基于所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数确定为故障函数。
28.结合第二方面,本公开实施例在第二方面的第一种实现方式中,所述装置还包括:
29.第二确定模块,被配置为根据历史故障信息和系统中服务器的负载能力,确定各埋点位置;
30.设置模块,被配置为在所述各埋点位置设置对应的埋点代码。
31.结合第二方面和第二方面的第一种实现方式,本公开实施例在第二方面的第二种实现方式中,所述装置还包括:
32.删除模块,被配置为在监测到第一埋点对应的第一埋点输出信息后,删除所述第一埋点输出信息。
33.结合第二方面、第二方面的上述实现方式,本公开在第二方面的第三种实现方式中,其中,第二获取模块,被配置为:
34.获取线程列表,所述线程列表包括至少一个正在执行的线程;
35.获取所述至少一个正在执行的线程的方法栈;
36.基于所述方法栈的栈顶的函数信息,得到所述调用函数的标识。
37.结合第二方面、第二方面的上述实现方式,本公开在第二方面的第四种实现方式中,其中,所述装置还包括:
38.第三确定模块,被配置为根据所述第一埋点和第二埋点之间的历史正常运行时长,确定所述第一预设时长。
39.第三方面,本公开实施例提供了一种电子设备,包括存储器和处理器,所述存储器
用于存储一条或多条支持故障定位装置执行上述故障定位方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。所述故障定位装置还可以包括通信接口,用于故障定位装置与其他设备或通信网络通信。
40.第四方面,本公开实施例提供了一种计算机可读存储介质,用于存储故障定位装置所用的计算机指令,其包含用于执行上述故障定位方法为故障定位装置所涉及的计算机指令。
41.第五方面,本公开实施例提供了一种计算机程序产品,包括计算机程序/指令,其中,该计算机程序/指令被处理器执行时实现上述故障定位方法中的步骤。
42.根据本公开实施例提供的技术方案,在监测到第一埋点对应的第一埋点输出信息后,监测第二埋点对应的第二埋点输出信息,所述第二埋点位于当前运行的程序中所述第一埋点位置之后的相邻埋点位置处,所述当前运行的程序在所述第一埋点和所述第二埋点之间有至少两个函数;在所述第一预设时长内未监测到所述第二埋点输出信息时,获取所述第一埋点和所述第二埋点之间的各个待监测函数的标识;获取当前正在执行的至少一个线程中正在调用的调用函数的标识;基于所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数,确定为故障函数。可以先进行埋点监测,由于任意两个埋点之间有至少两个函数,故可以确定出现故障的函数范围,再与当前正被调用的调用函数进行比对,确定出故障函数,这样无需在任意两个函数之间进行埋点,减少埋点数量,降低服务器负载,且故障定位也很快捷准确。
43.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开实施例。
附图说明
44.结合附图,通过以下非限制性实施方式的详细描述,本公开实施例的其它特征、目的和优点将变得更加明显。在附图中:
45.图1示出根据本公开一实施方式的一种故障定位方法的流程图;
46.图2示出根据本公开一实施方式的另一种故障定位方法的流程图;
47.图3示出根据本公开一实施方式的另一种故障定位方法的流程图;
48.图4示出根据本公开一实施方式的故障定位方法中的步骤s103的方法流程图;
49.图5示出根据本公开一实施方式的再一种故障定位方法的流程图
50.图6示出根据本公开一实施方式的一种故障定位装置的结构框图;
51.图7示出根据本公开一实施方式的另一种故障定位装置的结构框图;
52.图8示出根据本公开一实施方式的又一种故障定位装置的结构框图;
53.图9示出根据本公开一实施方式的再一种故障定位装置的结构框图;
54.图10示出根据本公开一实施方式的电子设备的结构框图;
55.图11是适于用来实现根据本公开一实施方式的故障定位方法的计算机系统的结构示意图。
具体实施方式
56.下文中,将参考附图详细描述本公开的示例性实施例,以使本领域技术人员可容
易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施例无关的部分。
57.在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
58.另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
59.在本公开中,对用户信息或用户数据的获取均为经用户授权、确认,或由用户主动选择的操作。
60.上文提及,在一个业务系统的客户较多的情况下,业务系统出现一点微小的故障都有可能在瞬间影响数以万计的客户。因此,为了避免业务系统出现故障影响客户,业务系统需要在出现故障的时候能够快速实现自愈。为了使业务系统在出现故障的时候能够快速实现自愈,需要对故障进行定位,确定故障出现的位置,这样在业务系统出现故障时,就可以将确定到的故障位置通知给对应的技术人员,以便技术人员及时进行故障排除。为了确定出现故障的具体位置,目前可以采用埋点的方式进行监控。埋点指的是在应用程序中插入输出语句。程序在运行到该输出语句时,可以输出预设字符。如果监测到预设字符,则说明输出语句前的程序并无问题。如此,可以确定程序中出现故障的位置。但是,埋点这种技术方案仅能确定两个埋点之间的程序是否出现故障。为了确定程序中各个函数的运行情况,需要在任意两个函数之间进行埋点。那么,当业务系统的体量较大时,需要埋点的数量大幅度增加,对代码的修改量较大,也会给服务器带来额外的负担。
61.考虑到上述问题,在本实施例中,提出一种故障定位方法,该方法可以先进行埋点监测,由于任意两个埋点之间有至少两个函数,故可以确定出现故障的函数范围,再与当前正被调用的调用函数进行比对,确定出故障函数,这样无需在任意两个函数之间进行埋点,减少埋点数量,降低服务器负载,且故障定位也很快捷准确。
62.图1示出根据本公开一实施方式的一种故障定位方法的流程图,如图1所示,所述故障定位方法包括以下步骤s101-s104:
63.在步骤s101中,在监测到第一埋点对应的第一埋点输出信息后,监测第二埋点对应的第二埋点输出信息,所述第二埋点位于当前运行的程序中所述第一埋点位置之后的相邻埋点位置处,所述当前运行的程序在所述第一埋点和所述第二埋点之间有至少两个函数;
64.在步骤s102中,在第一预设时长内未监测到所述第二埋点输出信息时,获取所述第一埋点和所述第二埋点之间的各个待监测函数的标识;
65.在步骤s103中,获取当前正在执行的至少一个线程中正在调用的调用函数的标识;
66.在步骤s104中,基于所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数确定为故障函数。
67.在本公开一实施方式中,所述故障定位方法可适用于可执行故障定位的计算机、计算设备、电子设备、服务器、服务器集群等。
68.在本公开一实施方式中,埋点是指业务系统中业务模块的程序内的埋点位置处插入埋点代码,这样在运行到业务模块的埋点位置处时就会运行该埋点代码生成相应的埋点
输出信息。示例的,埋点代码是用于指示生成一标识信息,如第一埋点位置处的埋点代码用于指示生成标识信息1,第二埋点位置处的埋点代码用于指示生成标识信息2,则该第一埋点输出信息就是标识信息1,该第二埋点输出信息就是标识信息1。
69.在本公开一实施方式中,该业务系统中相邻埋点之间有两个或两个以上函数。函数在面向对象设计的计算机程序中,又称方法,是指一段可以直接被另一段程序或代码引用的程序或代码。可以根据该系统的服务器的负载能力来确定埋点的个数,然后在该业务系统中均匀地设置埋点,相邻埋点之间函数个数相同,如此埋点方式简单,易实现;或者,也可以根据历史故障信息和系统中服务器的负载能力,确定各埋点位置,如此埋点准确,监测故障更快捷。
70.在本公开一实施方式中,相邻埋点之间的函数个数可以相同也可以不同,可以根据相邻埋点之间的函数个数确定相邻埋点之间程序正常运行时所需的最大运行时长。
71.在本公开一实施例中,在业务系统中埋点后,可以存储各埋点顺序,相邻埋点对应的最大运行时长,以及相邻埋点之间的函数信息(如函数标识)。
72.在本公开一实施方式中,对于基于面向对象设计方法设计的软件或系统,可以运行一个或多个进程,每个进程在运行的过程中可以通过一个或多个线程实现该进程的功能。其中,任意一个线程在运行的过程中,可以调用应用程序中任意一个函数实现该线程的功能。
73.在本公开一实施方式中,在监测到第一埋点对应的第一埋点输出信息时,表明该第一埋点之前的程序运行都是正常的,该第二埋点是位于该第一埋点之后的相邻埋点,为了确定该第一埋点和第二埋点之间的程序是否运行正常,此时就需要监测该第二埋点对应的第二埋点输出信息,该第一预设时长是程序在正常运行的情况下从该第一埋点位置处运行至该第二埋点位置处所需的最大运行时长。如果在第一预设时长内监测到该第二埋点对应的第二埋点输出信息,则表明该第一埋点和第二埋点之间的程序正常运行,可以继续监测该第二埋点之后的相邻埋点的埋点输出信息;如果在第一预设时长内未监测到该第二埋点对应的第二埋点输出信息,则表明该第一埋点和第二埋点之间的程序出现故障,不能运行至该第二埋点位置处,此时,可以获取所述第一埋点和所述第二埋点之间的各个待监测函数;这几个待监测函数就是可能产生故障的函数。为了确定这几个待监测函数中是哪个函数出现故障,可以获取当前正在执行的至少一个线程中正在调用的调用函数的标识,由于只有正在调用的调用函数出现故障,才会导致程序不能继续运行,故可以比对所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数,确定为故障函数。
74.本实施例提出的故障定位方法可以先进行埋点监测,由于任意两个埋点之间有至少两个函数,故可以确定出现故障的函数范围,再与当前正被调用的调用函数进行比对,确定出故障函数,这样无需在任意两个函数之间进行埋点,减少埋点数量,降低服务器负载,且故障定位也很快捷准确。
75.在本公开一实施方式中,如图2所示,上述故障定位方法还可包括以下步骤:
76.在步骤s105中,根据历史故障信息和系统中服务器的负载能力,确定各埋点位置;
77.在步骤s106中,在所述各埋点位置设置对应的埋点代码。
78.在该实施方式中,可以从历史故障日志中获取该系统中出现过故障的程序位置,
可以按照以下规则确定埋点位置:在出现故障越多的程序处进行越多的埋点,系统中服务器的负载能力越大埋点位置越多。可以先根据系统中服务器的负载能力确定埋点个数,然后根据历史故障信息确定程序中各个埋点位置。可以在各埋点位置插入对应的埋点代码,如此实现埋点。
79.本实施方式通过历史故障信息和系统中服务器的负载能力确定各埋点位置进行埋点,可以在故障频繁的程序处多埋点,这样,此处程序出现故障时,密集设置的埋点可以快速检测出故障所在区域;在故障较少的程序处少埋点,可以减少服务器的负载。
80.在本公开一实施方式中,如图3所示,上述故障定位方法还可包括以下步骤:
81.在步骤s107中,在监测到第一埋点对应的第一埋点输出信息后,删除所述第一埋点输出信息。
82.在该实施方式中,为了降低系统的存储压力,可以在监测到任一埋点对应的埋点输出信息后,直接删除该埋点输出信息。
83.在本公开一实施方式中,如图4所示,上述故障定位方法中的步骤s103可以实现为以下步骤:
84.在步骤s1031中,获取线程列表,所述线程列表包括至少一个正在执行的线程;
85.在步骤s1032中,获取所述至少一个正在执行的线程的方法栈;
86.在步骤s1033中,基于所述方法栈的栈顶的函数信息,得到所述调用函数的标识。
87.在该实施方式中,栈(stack)又名堆栈,是一种运算受限的数据结构,例如链表。栈的一段可以插入数据和删除数据,另一端则不能进行修改。其中,可以插入数据的一端称为栈顶,另一端称为栈底。数据从栈顶进入栈的过程称为压栈(或入栈、进栈)。数据从栈顶离开栈的过程称为出站(或推栈)。当新的数据进栈时,原先位于栈顶的元素后移。
88.在该实施方式中,可以获取线程列表,该线程列表可以包括至少一个正在执行的线程,例如可以是某服务器正在运行的线程列表。对于基于面向对象设计方法设计的软件或系统,在调用函数时,线程可以先将需要调用的函数的相关信息添加到方法栈中,在结束函数的调用后,线程可以将该函数的相关信息出栈。即,方法栈中有至少一个函数信息,方法栈的栈顶的函数即为线程当前正在调用的函数。故在获取到正在执行的线程后,可以通过线程快照的方式得到这些线程的方法栈的栈顶的函数信息,该函数信息中包括函数的标识等信息,这样就可以从所述方法栈的栈顶的函数信息中得到调用函数的标识,该调用函数的标识即为该方法栈的栈顶的函数的标识。
89.本实施方式可以通过获取正在执行的线程的方法栈的栈顶函数,得到线程正在调用的调用函数,获取方法简单快捷。
90.在本公开一实施方式中,如图5所示,上述故障定位方法还可以包括以下步骤:
91.在步骤s108中,根据所述第一埋点和第二埋点之间的历史正常运行时长,确定所述第一预设时长。
92.在该实施方式中,可以获取第一埋点和第二埋点之间的历史正常运行时长,将历史运行时长中的最大时长确定为第一预设时长,如此,可以精确地确定第一预设时长,避免设置的第一预设时长过短,导致后续故障判断失误,也避免设置的第一预设时长过长,导致不能及时监测到故障发生。
93.下述为本公开装置实施例,可以用于执行本公开方法实施例。
94.图6示出根据本公开一实施方式的一种故障定位装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。
95.如图6所示,所述故障定位装置600包括:监测模块601、第一获取模块602、第二获取模块603和第一确定模块604。
96.监测模块601,被配置为在监测到第一埋点对应的第一埋点输出信息后,监测第二埋点对应的第二埋点输出信息,所述第二埋点位于当前运行的程序中所述第一埋点位置之后的相邻埋点位置处,所述当前运行的程序在所述第一埋点和所述第二埋点之间有至少两个函数;
97.第一获取模块602,被配置为在第一预设时长内未监测到所述第二埋点输出信息时,获取所述第一埋点和所述第二埋点之间的各个待监测函数的标识;
98.第二获取模块603,被配置为获取当前正在执行的至少一个线程中正在调用的调用函数的标识;
99.第一确定模块604,被配置为基于所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数确定为故障函数。
100.在本公开一实施方式中,所述故障定位装置600可适用于可执行故障定位的计算机、计算设备、电子设备、服务器、服务器集群等。
101.在本公开一实施方式中,埋点是指业务系统中业务模块的程序内的埋点位置处插入埋点代码,这样在运行到业务模块的埋点位置处时就会运行该埋点代码生成相应的埋点输出信息。示例的,埋点代码是用于指示生成一标识信息,如第一埋点位置处的埋点代码用于指示生成标识信息1,第二埋点位置处的埋点代码用于指示生成标识信息2,则该第一埋点输出信息就是标识信息1,该第二埋点输出信息就是标识信息1。
102.在本公开一实施方式中,该业务系统中相邻埋点之间有两个或两个以上函数。函数在面向对象设计的计算机程序中,又称方法,是指一段可以直接被另一段程序或代码引用的程序或代码。可以根据该系统的服务器的负载能力来确定埋点的个数,然后在该业务系统中均匀地设置埋点,相邻埋点之间函数个数相同,如此埋点方式简单,易实现;或者,也可以根据历史故障信息和系统中服务器的负载能力,确定各埋点位置,如此埋点准确,监测故障更快捷。
103.在本公开一实施方式中,相邻埋点之间的函数个数可以相同也可以不同,可以根据相邻埋点之间的函数个数确定相邻埋点之间程序正常运行时所需的最大运行时长。
104.在本公开一实施例中,在业务系统中埋点后,可以存储各埋点顺序,相邻埋点对应的最大运行时长,以及相邻埋点之间的函数信息(如函数标识)。
105.在本公开一实施方式中,对于基于面向对象设计方法设计的软件或系统,可以运行一个或多个进程,每个进程在运行的过程中可以通过一个或多个线程实现该进程的功能。其中,任意一个线程在运行的过程中,可以调用应用程序中任意一个函数实现该线程的功能。
106.在本公开一实施方式中,在监测到第一埋点对应的第一埋点输出信息时,表明该第一埋点之前的程序运行都是正常的,该第二埋点是位于该第一埋点之后的相邻埋点,为了确定该第一埋点和第二埋点之间的程序是否运行正常,此时就需要监测该第二埋点对应的第二埋点输出信息,该第一预设时长是程序在正常运行的情况下从该第一埋点位置处运
行至该第二埋点位置处所需的最大运行时长。如果在第一预设时长内监测到该第二埋点对应的第二埋点输出信息,则表明该第一埋点和第二埋点之间的程序正常运行,可以继续监测该第二埋点之后的相邻埋点的埋点输出信息;如果在第一预设时长内未监测到该第二埋点对应的第二埋点输出信息,则表明该第一埋点和第二埋点之间的程序出现故障,不能运行至该第二埋点位置处,此时,可以获取所述第一埋点和所述第二埋点之间的各个待监测函数;这几个待监测函数就是可能产生故障的函数。为了确定这几个待监测函数中是哪个函数出现故障,可以获取当前正在执行的至少一个线程中正在调用的调用函数的标识,由于只有正在调用的调用函数出现故障,才会导致程序不能继续运行,故可以比对所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数,确定为故障函数。
107.本实施例提出的故障定位装置可以先进行埋点监测,由于任意两个埋点之间有至少两个函数,故可以确定出现故障的函数范围,再与当前正被调用的调用函数进行比对,确定出故障函数,这样无需在任意两个函数之间进行埋点,减少埋点数量,降低服务器负载,且故障定位也很快捷准确。
108.在本公开一实施方式中,如图7所示,所述装置还包括:
109.第二确定模块605,被配置为根据历史故障信息和系统中服务器的负载能力,确定各埋点位置;
110.设置模块606,被配置为在所述各埋点位置设置对应的埋点代码。
111.在该实施方式中,可以从历史故障日志中获取该系统中出现过故障的程序位置,可以按照以下规则确定埋点位置:在出现故障越多的程序处进行越多的埋点,系统中服务器的负载能力越大埋点位置越多。可以先根据系统中服务器的负载能力确定埋点个数,然后根据历史故障信息确定程序中各个埋点位置。可以在各埋点位置插入对应的埋点代码,如此实现埋点。
112.本实施方式通过历史故障信息和系统中服务器的负载能力确定各埋点位置进行埋点,可以在故障频繁的程序处多埋点,这样,此处程序出现故障时,密集设置的埋点可以快速检测出故障所在区域;在故障较少的程序处少埋点,可以减少服务器的负载。
113.在本公开一实施方式中,如图8所示,所述装置还包括:
114.删除模块607,被配置为在监测到第一埋点对应的第一埋点输出信息后,删除所述第一埋点输出信息。
115.在该实施方式中,为了降低系统的存储压力,可以在监测到任一埋点对应的埋点输出信息后,直接删除该埋点输出信息。
116.在本公开一实施方式中,第二获取模块603,被配置为:
117.获取线程列表,所述线程列表包括至少一个正在执行的线程;
118.获取所述至少一个正在执行的线程的方法栈;
119.基于所述方法栈的栈顶的函数信息,得到所述调用函数的标识。
120.在该实施方式中,栈(stack)又名堆栈,是一种运算受限的数据结构,例如链表。栈的一段可以插入数据和删除数据,另一端则不能进行修改。其中,可以插入数据的一端称为栈顶,另一端称为栈底。数据从栈顶进入栈的过程称为压栈(或入栈、进栈)。数据从栈顶离开栈的过程称为出站(或推栈)。当新的数据进栈时,原先位于栈顶的元素后移。
121.在该实施方式中,可以获取线程列表,该线程列表可以包括至少一个正在执行的线程,例如可以是某服务器正在运行的线程列表。对于基于面向对象设计方法设计的软件或系统,在调用函数时,线程可以先将需要调用的函数的相关信息添加到方法栈中,在结束函数的调用后,线程可以将该函数的相关信息出栈。即,方法栈中有至少一个函数信息,方法栈的栈顶的函数即为线程当前正在调用的函数。故在获取到正在执行的线程后,可以通过线程快照的方式得到这些线程的方法栈的栈顶的函数信息,该函数信息中包括函数的标识等信息,这样就可以从所述方法栈的栈顶的函数信息中得到调用函数的标识,该调用函数的标识即为该方法栈的栈顶的函数的标识。
122.本实施方式可以通过获取正在执行的线程的方法栈的栈顶函数,得到线程正在调用的调用函数,获取方法简单快捷。
123.在本公开一实施方式中,如图9所示,所述装置还包括:
124.第三确定模块608,被配置为根据所述第一埋点和第二埋点之间的历史正常运行时长,确定所述第一预设时长。
125.在该实施方式中,可以获取第一埋点和第二埋点之间的历史正常运行时长,将历史运行时长中的最大时长确定为第一预设时长,如此,可以精确地确定第一预设时长,避免设置的第一预设时长过短,导致后续故障判断失误,也避免设置的第一预设时长过长,导致不能及时监测到故障发生。
126.本公开还公开了一种电子设备,图10示出根据本公开一实施方式的电子设备的结构框图。
127.如图10所示,所述电子设备1000包括存储器1001和处理器1002;其中,所述存储器1001用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器1002执行以实现上述方法步骤,该方法包括:
128.在监测到第一埋点对应的第一埋点输出信息后,监测第二埋点对应的第二埋点输出信息,所述第二埋点位于当前运行的程序中所述第一埋点位置之后的相邻埋点位置处,所述当前运行的程序在所述第一埋点和所述第二埋点之间有至少两个函数;
129.在所述第一预设时长内未监测到所述第二埋点输出信息时,获取所述第一埋点和所述第二埋点之间的各个待监测函数的标识;
130.获取当前正在执行的至少一个线程中正在调用的调用函数的标识;
131.基于所述各个待监测函数的标识和所述调用函数的标识,将所述各个待监测函数中属于所述调用函数的待监测函数,确定为故障函数。
132.在本公开一实施方式中,所述方法还包括:
133.根据历史故障信息和系统中服务器的负载能力,确定各埋点位置;
134.在所述各埋点位置设置对应的埋点代码。
135.在本公开一实施方式中,所述方法还包括:
136.在监测到第一埋点对应的第一埋点输出信息后,删除所述第一埋点输出信息。
137.在本公开一实施方式中,所述获取当前正在执行的至少一个线程中正在调用的调用函数的标识,包括:
138.获取线程列表,所述线程列表包括至少一个正在执行的线程;
139.获取所述至少一个正在执行的线程的方法栈;
140.基于所述方法栈的栈顶的函数信息,得到所述调用函数的标识。
141.在本公开一实施方式中,所述方法还包括:
142.根据所述第一埋点和第二埋点之间的历史正常运行时长,确定所述第一预设时长。
143.图11是适于用来实现根据本公开一实施方式的故障定位方法的计算机系统的结构示意图。
144.如图11所示,计算机系统1100包括处理单元1101,其可以根据存储在只读存储器(rom)1102中的程序或者从存储部分1108加载到随机访问存储器(ram)1103中的程序而执行上述实施方式中的各种处理。在ram1103中,还存储有系统1100操作所需的各种程序和数据。处理单元1101、rom1102以及ram1103通过总线1104彼此相连。输入/输出(i/o)接口1105也连接至总线1104。
145.以下部件连接至i/o接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至i/o接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。其中,所述处理单元1101可实现为cpu、gpu、tpu、fpga、npu等处理单元。
146.特别地,根据本公开的实施方式,上文描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行所述故障定位方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。
147.附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
148.描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
149.作为另一方面,本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开实施例的方法。
150.以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开实施例中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开实施例中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献