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

一种通用死锁检测方法及装置与流程

2022-04-14 04:17:11 来源:中国专利 TAG:


1.本技术实施例涉及软件系统的领域,具体而言,涉及一种通用死锁检测方法及装置。


背景技术:

2.死锁是在软件系统中非常常见的异常情况,无论是在网络通信、进程通信还是在数据库操作中均会出现。如果是程序进程间发生死锁,则相互等待的进程均会持续阻塞,永远不会返回,相互等待的资源也永远不会得到解锁。如果是数据库中的事务发生死锁,则相互等待的事务同样会持续阻塞,等待的资源也同样永不会被解锁。
3.目前常见的检测方案都是通过分析死锁的生成条件来设计的,但是现有技术中,检测方案存在一些问题,现有方案在检测死锁时通常需要侵入到软件内部获得才能针对检测目标获得足够的分析数据,因此无法通用,例如,用来检测java线程死锁的检测工具无法检测数据库中出现的死锁。


技术实现要素:

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.图1是本技术一实施例提出的检测方法的步骤流程图;
42.图2是本技术一实施例提出的检测装置的功能模块图。
具体实施方式
43.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
44.实施例一
45.参照图1,示出了本发明实施例中的一种通用死锁检测方法的步骤流程图,如图1所示,本检测方法具体可以包括以下步骤:
46.s101,获取软件系统中当前的所有资源,形成资源列表;
47.资源列表用于存储该软件系统中所有的资源,例如,在数据库系统中,如果该数据库使用的是表级别的锁,则资源列表用于存储数据库系统中所有的表名,通过表名就能够找到数据库系统中所有的资源。
48.s102,获取所述软件系统中所有对资源进行的操作,并获取所述操作的持续时间,形成操作列表;
49.每当在软件系统中发生涉及到资源的操作时,均捕捉这些操作,并将这些操作汇总到操作列表中,在汇总时,操作列表上也记载操作的时间。
50.s103,将所述资源列表与所述操作列表进行关联,形成关联列表,所述关联列表用于表征所述软件系统中一个操作与该操作所针对的资源之间的关联关系;
51.操作列表中记载了软件系统中所有涉及资源的操作,而资源列表中记载了所有软件系统中的资源,通过关联列表将软件系统中一个操作与该操作所针对的资源之间的关联关系记载后,在对其中一个操作进行死锁检测时,能够在关联列表中更快的将该操作所针对的资源找到。
52.s104,基于所述关联列表和每个操作的持续时间,进行死锁预检测;
53.死锁预检测是为了在操作列表中找到可能产生死锁的操作,为下一步进行死锁检测提供数据基础。
54.s105,对死锁预检测未通过的目标操作,确定调用所述目标操作所针对的资源是否成功,
55.若所述调用成功,则所述目标操作未产生死锁;
56.若所述调用失败,则所述目标操作产生死锁。
57.在对目标操作进行死锁检测时,通过调用目标操作所针对的资源的方法;若是目标操作产生死锁,则目标操作所针对的资源也会被锁住,导致无法调用,而若是目标操作没
有产生死锁,则目标操作所针对的资源也能够调用;在检测时,通过了对目标操作产生死锁后形成的结果进行检测,比常规技术方案中针对目标操作产生的条件来进行检测更加方便,且这种针对结果的检测方法也能够应用到不同的软件系统中,不用再为不同的软件系统开发新的死锁检测工具,具有较强的通用性。
58.本实施例通过获取软件系统中的所有资源形成资源列表,并获取有所有对资源进行的操作,形成操作列表,并将资源列表和操作列表关联到一起形成关联列表;通过关联列表和每个操作的持续时间,进行死锁预检测,未通过死锁预检测目标操作就有可能发生了死锁的情况;再调用可能发生了死锁的目标操作所针对的资源;从死锁发生导致的结果来说,若目标操作发生了死锁,则目标操作针对的资源就无法调用,则调用目标操作所针对的资源成功的目标操作未产生死锁,而调用目标操作所针对的资源失败的目标操作产生了死锁;在检测时,因为本方法是从死锁产生后会导致调用死锁资源失败的结果来对死锁进行检测,所以本方法在检测时无需考虑检测目标,只要能够获取检测目标中的操作列表和资源列表,均能够进行死锁检测,达到了能够检测不同软件系统中死锁的效果。
59.实施例二
60.参照图1所示,示出了本技术实施例的一种通用死锁检测方法的步骤流程图,如图1所示,该检测方法具体可以包括以下步骤:
61.s101,获取软件系统中当前的所有资源,形成资源列表;包括:
62.设置检测周期,创建与每个检测周期对应的资源列表;
63.检测周期是需要检测死锁的周期,检测周期可以由工作人员设定,也可以设定为随机周期;例如需要从12时到16时检测软件系统内是否存在死锁发生,则检测周期设置为4个小时循环,资源列表上就要列出这4个小时内的所有可能会被锁住的资源。
64.在所述检测周期内,持续获取所述软件系统中的资源识别信息,所述资源识别信息用于表征所述软件系统内的资源;
65.资源识别信息能够代表软件系统内的资源,当软件系统是数据库时,若资源是数据库中的表,则资源识别信息就是表名,若资源是表中的记录,则资源识别信息就是表中的行锁。
66.将所述资源识别信息列入所述资源列表中。
67.在检测周期内软件系统内所有可能被锁住的资源均需要列入到软件系统中,在进行死锁检测时,才不会发生没有产生死锁确检测到死锁的情况。
68.在所述检测周期内,每当有资源在软件系统中消失时,均在所述资源列表删除所述资源对应的资源识别信息。
69.资源列表中的资源识别信息需要实时更新,若是软件系统中的某个资源被软件系统删除,则需要在资源列表中将该资源的资源识别信息对应的进行删除,以防止出现检测漏洞。
70.s102,获取所述软件系统中所有对资源进行的操作,并获取所述操作的持续时间,形成操作列表;包括:
71.在所述检测周期开始时,获取所述软件系统中所有对资源进行的操作,形成预操作列表;
72.在软件系统中,若出现需要调用软件系统的操作,则均会出现相应的记录;在本实
施例中,采用脚本来捕捉软件系统中的操作;例如,在检测周期内,采用脚本执行操作系统自带的线程命令,来获得操作系统中程序进程中的线程信息并上报,或者使用触发器检测数据库中的事务变化情况。均可以获取到操作系统中的操作,在识别该操作是否调用资源,剔除没有调用资源的操作,就能够形成预操作列表。
73.持续获取所述软件系统中所有对资源进行的操作,形成上报列表;
74.在检测周期内,只要产生了调用资源的操作,就把该操作列入到上报列表中,上报列表是在检测周期内实时捕捉到的操作形成的列表;与预操作列表不同的是,预操作列表需要通过上报列表来进行更新,上报列表是预操作列表的信息来源。
75.基于所述预操作列表和所述上报列表,判断是否存在操作完成的操作或存在新的操作;
76.每当存在操作完成或存在新的操作时,均更新所述预操作列表,得到操作列表。
77.若是操作完成,则该操作就不可能再发生死锁,所以需要从预操作列表中删除,若是出现新的操作,则需要将新的操作也补充到预操作列表中,才能够形成最终的操作列表;在本实施例中,预操作列表是基于上报列表实时更新的,而操作列表就是更新完成后的预操作列表,所以操作列表中列出的操作能够与软件系统中实时存在的操作一致,不会产生偏差。
78.s103,将所述资源列表与所述操作列表进行关联,形成关联列表,所述关联列表用于表征所述软件系统中一个操作与该操作所针对的资源之间的关联关系;
79.资源列表中列出了检测周期内软件系统中所有的资源,而操作列表中列出了检测周期内所有对资源进行的操作,则操作列表中的操作与资源列表中的资源之间就有关联关系,通过设置关联列表,就能够将这种关联关系较为清晰的指出。
80.形成关联列表包括:
81.基于所述操作列表,获取所述操作列表中所有操作所调用的资源;
82.在所述资源列表内设置操作标识,得到关联列表。
83.在资源列表中,有一部分资源可能只是存在于软件系统中,并没有被软件系统中的操作调用,而操作列表中的所有操作均在资源列表中存在对应的资源;所以在关联操作列表与资源列表时,通过在资源列表中设置操作标识的方式来进行关联,以保证关联列表中所有的操作都能有对应的资源。
84.s104,基于所述关联列表和每个操作的持续时间,进行死锁预检测;包括:
85.基于所述关联列表,为所述关联列表内的每个操作均设置时间阈值;
86.时间阈值的设置中,将时间阈值设置为大于每个操作在软件系统中持续时间的上限值;且时间阈值的设置与操作本身有关,有些操作在软件系统中的存活时间较长,则时间阈值会设置得大一些。例如,一个调用数据库中表的操作,其在软件系统中的持续时间可能只有几毫秒,在设置时间阈值时,就将时间阈值设置为一秒;一个下载数据库中数据的操作,其在软件系统中的持续时间可能达到十分钟,在设置时间阈值时,就将时间阈值设置为十五分钟;软件系统在进行一个操作时,若该操作已经完成,则软件系统均会将该操作杀死,以避免过多的操作占用系统资源。
87.若所述操作的持续时间的大于等于所述操作的时间阈值,则未通过死锁预检测;
88.在进行死锁预检测时,若发现调用数据库中表的操作持续时间已经超出了一分
钟,已经超出了设置的时间阈值,也远远大于正常情况下调用一张表所需要的时间,则这个操作可能已经发生了死锁,则将这个操作放入到未通过死锁预检测的分类中。
89.若所述所述操作的持续时间的小于所述操作的时间阈值,则通过死锁预检测。
90.若发现下载数据库中数据的操作持续时间在九分钟,则其持续时间小于时间阈值,且该操作在结束后会被系统杀死,所以该操作肯定不存在死锁的情况,视作通过死锁预检测。
91.s105,对死锁预检测未通过的目标操作,确定调用所述目标操作所针对的资源是否成功,
92.若所述调用成功,则所述目标操作未产生死锁;
93.若所述调用失败,则所述目标操作产生死锁。
94.死锁预检测是对超出时间阈值的操作进行一次筛选,未通过死锁预检测的操作可能产生死锁,但是也有可能因为其它的系统问题而导致其持续时间大于等于时间阈值,所以需要再对死锁预检测的结果进行一次确定。
95.在确定时,本实施例采用基于结果的思想来进行;在软件系统中,如果是程序进程间发生死锁,则相互等待的进程均会持续阻塞,永远不会返回,相互等待的资源也永远不会得到解锁;例如,在数据库中,若数据库的事务发生死锁,则相互等待的事务同样会持续阻塞,等待的资源也同样永不会被解锁。
96.通过死锁的结果可以看出,若是要判断是否产生死锁,只需要在死锁预检测的基础上,再调用一次可能死锁的操作所针对的资源,就能够进行最终的确定。若是资源能够被调动,则说明与该资源对应的操作没有将资源锁死,该操作未通过死锁预检测是因为其它原因;若是该资源不能够被调用,则说明与该资源对应的操作将资源锁死了,该操作产生了死锁。通过死锁预检测与后续的验证,就能够确定操作是否真的发生死锁,完成死锁检测的过程。且本实施例提供的方法是针对于结果提出的,在检测的过程中,不需要像传统的方法,侵入到软件内部,才能针对检测目标获得足够的分析数据,是一种无侵入式的检测方法,能够应用到各种软件系统中。
97.本实施例通过获取软件系统中的所有资源形成资源列表,并获取有所有对资源进行的操作,形成操作列表,并将资源列表和操作列表关联到一起形成关联列表;通过关联列表和每个操作的持续时间,进行死锁预检测,未通过死锁预检测目标操作就有可能发生了死锁的情况;再调用可能发生了死锁的目标操作所针对的资源;从死锁发生导致的结果来说,若目标操作发生了死锁,则目标操作针对的资源就无法调用,则调用目标操作所针对的资源成功的目标操作未产生死锁,而调用目标操作所针对的资源失败的目标操作产生了死锁;在检测时,因为本方法是从死锁产生后会导致调用死锁资源失败的结果来对死锁进行检测,所以本方法在检测时无需考虑检测目标,只要能够获取检测目标中的操作列表和资源列表,均能够进行死锁检测,达到了能够检测不同软件系统中死锁的效果,死锁检测方法能够通用化。
98.实施例三
99.基于同一发明构思,图2示出的一种通用死锁检测装置的示意图,参照图2所示,所述检测装置可以包括资源列表模块、操作列表模块、关联模块、死锁预测检测模块和死锁检测模块;
100.资源列表模块,用于获取软件系统中当前的所有资源,形成资源列表;
101.操作列表模块,用于获取所述软件系统中所有对资源进行的操作,并获取所述操作的持续时间,形成操作列表;
102.关联模块,用于将所述资源列表与所述操作列表进行关联,形成关联列表,所述关联列表用于表征所述软件系统中一个操作与该操作所针对的资源之间的关联关系;
103.死锁预测检测模块,用于基于所述关联列表和每个操作的持续时间,进行死锁预检测;
104.死锁检测模块,用于对死锁预检测未通过的目标操作,确定调用所述目标操作所针对的资源是否成功,若所述调用成功,则所述目标操作未产生死锁;若所述调用失败,则所述目标操作产生死锁。
105.资源列表模块包括列表创建单元、资源识别信息获取单元、导入单元和删除单元;其中,
106.列表创建单元用于设置检测周期,创建与每个检测周期对应的资源列表;
107.资源识别信息获取单元用于在所述检测周期内,持续获取所述软件系统中的资源识别信息,所述资源识别信息用于表征所述软件系统内的资源;
108.导入单元用于将所述资源识别信息列入所述资源列表中;
109.删除单元用于在所述检测周期内,每当有资源在软件系统中消失时,均在所述资源列表删除所述资源对应的资源识别信息。
110.操作模块包括预操作列表单元、上报单元、操作判断单元和操作列表更新单元;其中,
111.预操作列表单元用于在所述检测周期开始时,获取所述软件系统中所有对资源进行的操作,形成预操作列表;
112.上报单元用于持续获取所述软件系统中所有对资源进行的操作,形成上报列表;
113.操作判断单元,基于所述预操作列表和所述上报列表,判断是否存在操作完成的操作或存在新的操作;
114.操作列表更新单元,每当存在操作完成或存在新的操作时,均更新所述预操作列表,得到操作列表。
115.关联模块包括资源关系获取单元和操作标识设置单元;其中,
116.资源关系获取单元用于基于所述操作列表,获取所述操作列表中所有操作所调用的资源;
117.操作标识设置单元用于在所述资源列表内设置操作标识,得到关联列表。
118.死锁预测检测模块包括时间阈值设置单元和时间阈值判断单元;其中,
119.时间阈值设置单元,基于所述关联列表,为所述关联列表内的每个操作均设置时间阈值;
120.时间阈值判断单元,若所述操作的持续时间的大于等于所述操作的时间阈值,则未通过死锁预检测;
121.若所述所述操作的持续时间的小于所述操作的时间阈值,则通过死锁预检测。
122.对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
123.本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
124.本领域内的技术人员应明白,本技术实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本技术实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
125.本技术实施例是参照根据本技术实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
126.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
127.这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
128.尽管已描述了本技术实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本技术实施例范围的所有变更和修改。
129.最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
130.本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
再多了解一些

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

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

相关文献