CN113703987B - Java任务死锁检测方法及装置 - Google Patents

Java任务死锁检测方法及装置 Download PDF

Info

Publication number
CN113703987B
CN113703987B CN202111073277.3A CN202111073277A CN113703987B CN 113703987 B CN113703987 B CN 113703987B CN 202111073277 A CN202111073277 A CN 202111073277A CN 113703987 B CN113703987 B CN 113703987B
Authority
CN
China
Prior art keywords
stack
lock
task
tasks
loop
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.)
Active
Application number
CN202111073277.3A
Other languages
English (en)
Other versions
CN113703987A (zh
Inventor
李文彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bank of China Ltd
Original Assignee
Bank of China Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Bank of China Ltd filed Critical Bank of China Ltd
Priority to CN202111073277.3A priority Critical patent/CN113703987B/zh
Publication of CN113703987A publication Critical patent/CN113703987A/zh
Application granted granted Critical
Publication of CN113703987B publication Critical patent/CN113703987B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种Java任务死锁检测方法及装置,可用于金融领域,其中方法包括:获得多个任务的琐资源信息,其中每个任务对应的琐资源信息包括该任务的持有锁和申请琐;根据所述多个任务的琐资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明可以进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性。

Description

Java任务死锁检测方法及装置
技术领域
本发明涉及金融领域,尤其涉及Java任务死锁检测方法及装置。需要说明的是,本发明Java任务死锁检测方法和装置可用于金融领域,也可用于除金融领域之外的任意领域,本发明Java任务死锁检测方法和装置的应用领域不做限定。
背景技术
Java并发编程时,经常会出现两个或两个以上的任务(线程)在执行过程中,因争夺锁资源而互相等待的现象,即死锁。死锁一旦产生,重则会将整个Java应用摧毁。
现有技术中通常是在死锁发生后进行检测并提示,难以避免死锁的发生,无法保证系统的安全性和可靠性。
因此,亟需一种可以克服上述问题的Java任务死锁检测方案。
发明内容
本发明实施例提供一种Java任务死锁检测方法,用以进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性,该方法包括:
获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
根据判断的结果,进行Java任务死锁检测。
本发明实施例提供一种Java任务死锁检测装置,用以进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性,该装置包括:
信息获得模块,用于获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
回路判断模块,用于根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
死锁检测模块,用于根据判断的结果,进行Java任务死锁检测。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述Java任务死锁检测方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述Java任务死锁检测方法的计算机程序。
本发明实施例通过获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;根据所述多个任务的锁资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明实施例根据多个任务的锁资源信息,采用栈结构进行回路判断,并根据判断的结果进行Java任务死锁检测,从而可以有效避免死锁发生,保证系统安全性和可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中Java任务死锁检测方法示意图;
图2~图4为本发明具体实施例中Java任务死锁检测方法示意图;
图5为本发明实施例中Java任务死锁检测装置结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
如前所述,Java的并发编程时,编码不当很可能会造成死锁,死锁一旦产生,重则会将整个java应用摧毁。目前jvm只提供了死锁发生后的检测API,并未提供死锁预检测机制。Java中预防死锁的办法一般是通过锁超时来避免,也就是当任务1请求b锁时,如果超过了设置的时间,则抛出异常(破坏回路)。该方法的缺点是如果不是死锁造成的等待,该超时锁也会抛出“超时异常”。
为了进行Java任务死锁检测,避免死锁发生,保证系统安全性和可靠性,本发明实施例提供一种Java任务死锁检测方法,如图1所示,该方法可以包括:
步骤101、获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
步骤102、根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
步骤103、根据判断的结果,进行Java任务死锁检测。
由图1所示可以得知,本发明实施例通过获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;根据所述多个任务的锁资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明实施例根据多个任务的锁资源信息,采用栈结构进行回路判断,并根据判断的结果进行Java任务死锁检测,从而可以有效避免死锁发生,保证系统安全性和可靠性。
实施例中,获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁。根据所述多个任务的锁资源信息,采用栈结构进行回路判断。
本实施例中,根据所述多个任务的锁资源信息,采用栈结构进行回路判断,包括:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断。
本实施例中,根据比较的结果进行回路判断,包括:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
实施例中,根据判断的结果,进行Java任务死锁检测。
本实施例中,根据判断的结果,进行Java任务死锁检测,包括:若判断为回路,则发出死锁异常报警信息。
下面结合具体实施例,说明本发明实施例中Java任务死锁检测的具体应用。假设有两个并发任务:任务1和任务2。
任务1伪代码如下:
Lock(a)
Dosometing()
Lock(b)
Dosometing2()
Unlock(b)
Unlock(a)
任务2伪代码如下:
Lock(b)
Dosometing()
Lock(a)
Dosometing2()
Unlock(a)
Unlock(b)
上述锁资源a和b的请求顺序;当任务1和任务2并发运行时,如果恰好处在如图2的状态时,则会造成死锁,也即两个任务都在等待对方释放锁资源。因此,可以将锁写入“锁资源信息”中,状态为“请求”并进行于检查判断,如果构成回路则抛出“死锁异常”。将对应的锁更新为“持有”,然后将对应的锁删除。
具体的,可以将任务1伪代码改造如下:
seq();
Lock(a)
hold();
Dosometing()
seq()
Lock(b)
hold()
Dosometing2()
Unlock(b)
clear()
Unlock(a)
clear()
具体的,首先在申请锁前后增加seq和hold动作,在释放锁后增加clear动作。分别记录任务和锁的相关信息。其次在每次申请锁时,再引入“运行期死锁预检测”动作,当任务以及锁信息构成循环依赖时,在当前的任务里抛出“死锁异常”(破坏回路),从而避免死锁的发生。对于使用juc的Lock的代码,可以通过扩展juc的lock类透明地将seq,hold,clear动作嵌入进去,如下所示:
其中,在seq动作中的进行运行期的Java任务死锁检测。以3个任务的死锁为例说明死锁的检测预防。假设任务1持有a锁e锁,申请b锁;任务2持有b锁,申请c锁;任务3持有c锁,申请a锁”,如表1和图3所示。
表1
任务名 持有锁 申请锁 持有锁->申请锁 任务说明
任务1 a,e b A->b,e->b 任务1持有a锁e锁,申请b锁
任务2 b c B->c 任务2持有b锁,申请c锁
任务3 c a C->a 任务3持有c锁,申请a锁
在进行Java任务死锁检测时,将3个任务的锁资源信息采用栈结构存入栈中并进行回路判断,如图4所示,具体如下:
S1:将当前任务1中的持有锁和申请锁压入栈中;
S2:弹出栈顶,搜索持有锁等于栈顶(b锁)任务,并将该任务对应的申请锁压栈;
S3:弹出栈顶,搜索持有锁等于栈顶(c锁)任务,并将该任务对应的申请锁压栈;
S4:比较栈顶和次栈顶,如果相同则消除,当栈为空时,则构成了回路。
预检查死锁算法如下所示:
本发明实施例通过引入死锁检测机制,在多线程编程时可以避免死锁的发生,提升了系统的安全性和可靠性。
基于同一发明构思,本发明实施例还提供了一种Java任务死锁检测装置,如下面的实施例所述。由于这些解决问题的原理与Java任务死锁检测方法相似,因此Java任务死锁检测装置的实施可以参见方法的实施,重复之处不再赘述。
图5为本发明实施例中Java任务死锁检测装置的结构图,如图5所示,该Java任务死锁检测装置包括:
信息获得模块501,用于获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
回路判断模块502,用于根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
死锁检测模块503,用于根据判断的结果,进行Java任务死锁检测。
一个实施例中,所述回路判断模块502进一步用于:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断。
一个实施例中,所述回路判断模块502进一步用于:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
一个实施例中,所述死锁检测模块503进一步用于:
若判断为回路,则发出死锁异常报警信息。
综上所述,本发明实施例通过获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;根据所述多个任务的锁资源信息,采用栈结构进行回路判断;根据判断的结果,进行Java任务死锁检测。本发明实施例根据多个任务的锁资源信息,采用栈结构进行回路判断,并根据判断的结果进行Java任务死锁检测,从而可以有效避免死锁发生,保证系统安全性和可靠性。
基于前述发明构思,本发明还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现前述Java任务死锁检测方法。
基于前述发明构思,本发明提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述Java任务死锁检测方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种Java任务死锁检测方法,其特征在于,包括:
获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
根据判断的结果,进行Java任务死锁检测;
根据所述多个任务的锁资源信息,采用栈结构进行回路判断,包括:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断;
根据比较的结果进行回路判断,包括:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
2.如权利要求1所述的Java任务死锁检测方法,其特征在于,根据判断的结果,进行Java任务死锁检测,包括:
若判断为回路,则发出死锁异常报警信息。
3.一种Java任务死锁检测装置,其特征在于,包括:
信息获得模块,用于获得多个任务的锁资源信息,其中每个任务对应的锁资源信息包括该任务的持有锁和申请锁;
回路判断模块,用于根据所述多个任务的锁资源信息,采用栈结构进行回路判断;
死锁检测模块,用于根据判断的结果,进行Java任务死锁检测;
所述回路判断模块进一步用于:
将所述多个任务中当前任务的持有锁和申请锁依次压入栈中;
循环进行如下操作直至遍历全部任务:弹出栈顶的申请锁,在多个任务中选出持有锁为弹出的申请锁的任务,将选出的任务对应的申请锁压入栈中;
对栈顶和次栈顶进行比较;
根据比较的结果进行回路判断;
所述回路判断模块进一步用于:
若栈顶和次栈顶相同,则消除栈顶和次栈顶;
在消除栈顶和次栈顶之后,若栈为空则判断为回路。
4.如权利要求3所述的Java任务死锁检测装置,其特征在于,所述死锁检测模块进一步用于:
若判断为回路,则发出死锁异常报警信息。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至2任一所述方法。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至2任一所述方法。
CN202111073277.3A 2021-09-14 2021-09-14 Java任务死锁检测方法及装置 Active CN113703987B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111073277.3A CN113703987B (zh) 2021-09-14 2021-09-14 Java任务死锁检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111073277.3A CN113703987B (zh) 2021-09-14 2021-09-14 Java任务死锁检测方法及装置

Publications (2)

Publication Number Publication Date
CN113703987A CN113703987A (zh) 2021-11-26
CN113703987B true CN113703987B (zh) 2024-02-23

Family

ID=78660307

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111073277.3A Active CN113703987B (zh) 2021-09-14 2021-09-14 Java任务死锁检测方法及装置

Country Status (1)

Country Link
CN (1) CN113703987B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101295266A (zh) * 2008-06-05 2008-10-29 华为技术有限公司 检测和解除死锁的方法、装置和系统
CN103399818A (zh) * 2013-08-13 2013-11-20 中国科学技术大学苏州研究院 操作系统中的死锁检测方法
CN112905372A (zh) * 2021-02-02 2021-06-04 浙江大华技术股份有限公司 线程的异常诊断方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101295266A (zh) * 2008-06-05 2008-10-29 华为技术有限公司 检测和解除死锁的方法、装置和系统
CN103399818A (zh) * 2013-08-13 2013-11-20 中国科学技术大学苏州研究院 操作系统中的死锁检测方法
CN112905372A (zh) * 2021-02-02 2021-06-04 浙江大华技术股份有限公司 线程的异常诊断方法及装置

Also Published As

Publication number Publication date
CN113703987A (zh) 2021-11-26

Similar Documents

Publication Publication Date Title
US7908521B2 (en) Process reflection
US5664088A (en) Method for deadlock recovery using consistent global checkpoints
US10042695B1 (en) Program exception recovery
US20180060568A1 (en) System And Method Of Dynamically Updating Stack Canaries
US20080276025A1 (en) Lock inference for atomic sections
US8875165B2 (en) Computing device having a DLL injection function, and DLL injection method
US7430740B1 (en) Process group resource manager
US20040025164A1 (en) Detecting deadlocks in multithreaded programs
US20070143766A1 (en) Deadlock detection in a computing environment
US5301311A (en) Control method for preventing incorrect reset of common resource and multicomputer system executing the method
US20100262972A1 (en) Deadlock avoidance
CN109117201B (zh) 一种程序退出的方法及相关设备
US11281441B2 (en) Method and apparatus for compiling source code object, and computer
US8132174B2 (en) Concurrency management in cluster computing of business applications
EP3652667B1 (en) System and method for detecting malware injected into memory of a computing device
US20100037094A1 (en) Application Failure Recovery
US20150019846A1 (en) System level architecture verification for transaction execution in a multi-processing environment
CN113703987B (zh) Java任务死锁检测方法及装置
US7921329B2 (en) Worker thread corruption detection and remediation
CN107766131B (zh) 任务调度方法和装置
CN109558249B (zh) 一种并发操作的控制方法及装置
CN112487010B (zh) 一种区块链用户数据表更新方法、设备及存储介质
CN115454599A (zh) 任务处理方法、系统、装置、存储介质以及电子设备
CN110673899A (zh) 一种程序处理方法及相关设备
US7437612B1 (en) Postmortem detection of owned mutual exclusion locks

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
GR01 Patent grant
GR01 Patent grant