[发明专利]程序死锁的测试方法、装置和设备有效
| 申请号: | 201811402704.6 | 申请日: | 2018-11-22 |
| 公开(公告)号: | CN109669858B | 公开(公告)日: | 2022-04-12 |
| 发明(设计)人: | 郭祥斌 | 申请(专利权)人: | 新华三技术有限公司合肥分公司 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/52 |
| 代理公司: | 北京超凡志成知识产权代理事务所(普通合伙) 11371 | 代理人: | 王艳芬 |
| 地址: | 230000 安徽省合肥市高新区创*** | 国省代码: | 安徽;34 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 程序 死锁 测试 方法 装置 设备 | ||
本公开提供了一种程序死锁的测试方法、装置和设备,在被测试程序启动后,通过侦听被测试程序中线程的处理指令的方法,记录各个线程的用于表征该线程加锁与解锁流程的锁对象信息序列,并在被测试程序停止运行后,获取各个线程的锁对象信息序列包含的带有嵌套关系的最简加锁序列,然后根据该最简加锁序列绘制有向图,从而根据该有向图确定被测试程序的死锁信息。该方式通过自动收集被测试程序运行中死锁隐患的相关数据,以该相关数据为依据利用有向图确定相应程序的死锁信息,从而实现了死锁隐患的自动检测,有效提高了发现死锁隐患的概率。
技术领域
本公开涉及计算机技术领域,尤其是涉及程序死锁的测试方法、装置和设备。
背景技术
Java是目前最流行的编程语言之一,在全球有非常多的大型服务程序(如Web程序)采用Java作为主要编程语言。Java语言编写的程序被编译为字节码后,由JVM(JavaVirtual Machine,Java虚拟机)负责解释执行。
Java语言支持多线程机制,一般大型服务程序的开发者在书写Java程序时,都会编写代码启动多个不同的线程来并发地完成任务。如果程序开发者编写的代码,采用了不恰当的线程间同步机制,例如参见图1,如果线程T1已加锁lock1(lock1为锁对象标识),然后再请求加锁lock2(lock2为锁对象标识),然后才能执行一个事务;此时如果lock2已被线程T2占用,线程T1就会停止执行,等待线程T2释放lock2;如果线程T2在持有锁lock2期间,期望加锁lock1,就必须等待线程T1释放lock1,此时线程T2就会停止执行,等待T1释放lock1;从上述描述看,T1和T2都会停止执行,且永远没有时机再恢复执行,从而导致死锁现象。
死锁现象一旦发生,服务程序就有很大可能无法继续正常提供服务。现有技术中通常在程序发布前,对程序进行评审以检查程序中的死锁问题,由于大型程序的设计和编码都比较复杂,存在隐患的代码的调用关系也非常庞大,通过肉眼发现死锁隐患的概率较低。
发明内容
有鉴于此,本公开的目的在于提供一种程序死锁的测试方法、装置和设备,以实现死锁隐患的自动检测,有效提高发现死锁隐患的概率。
为了实现上述目的,本公开采用的技术方案如下:
第一方面,本公开提供了一种程序死锁的测试方法,包括:在被测试程序启动后,侦听被测试程序中的线程的处理指令;如果侦听到该线程的锁指令,记录该线程的锁对象信息序列;其中,该锁指令包括加锁指令和解锁指令;该锁对象信息序列包括:该加锁指令对应的加锁对象信息和该解锁指令对应的解锁对象信息;当被测试程序停止运行时,获取上述各个线程的锁对象信息序列中的最简加锁序列;其中,该最简加锁序列为带有嵌套关系的加锁对象序列;将各个线程的最简加锁序列中相同的最简加锁序列合并;绘制合并后的最简加锁序列的有向图;基于绘制出的有向图确定被测试程序的死锁信息。
第二方面,本公开提供了一种程序死锁的测试装置,包括:指令侦听模块,用于在被测试程序启动后,侦听被测试程序中的线程的处理指令;信息记录模块,用于当侦听到线程的锁指令时,记录该线程的锁对象信息序列;其中,该锁指令包括加锁指令和解锁指令;该锁对象信息序列包括:该加锁指令对应的加锁对象信息和该解锁指令对应的解锁对象信息;序列获取模块,用于当被测试程序停止运行时,获取上述各个线程的锁对象信息序列中的最简加锁序列;其中,该最简加锁序列为带有嵌套关系的加锁对象序列;序列合并模块,用于将各个线程的最简加锁序列中相同的最简加锁序列合并;绘制模块,用于绘制合并后的最简加锁序列的有向图;死锁确定模块,用于基于绘制出的有向图确定被测试程序的死锁信息。
第三方面,本公开实施方式提供了一种程序死锁的测试设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现上述方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于新华三技术有限公司合肥分公司,未经新华三技术有限公司合肥分公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811402704.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种自动化测试方法
- 下一篇:服务测试方法、装置、计算机设备和存储介质





