[发明专利]死锁检测方法、装置、设备及计算机可读存储介质在审
申请号: | 202010785310.4 | 申请日: | 2020-08-06 |
公开(公告)号: | CN111767155A | 公开(公告)日: | 2020-10-13 |
发明(设计)人: | 刘华星 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 北京市立方律师事务所 11330 | 代理人: | 张筱宁 |
地址: | 518000 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 死锁 检测 方法 装置 设备 计算机 可读 存储 介质 | ||
本申请实施例提供了一种死锁检测方法、装置、设备及计算机可读存储介质,该方法包括:获取目标线程集合中的每一第一线程的线程标识,目标线程集合包括至少一个第一线程,第一线程在运行过程中处于阻塞状态;对于每一第一线程,确定该第一线程等待占用的被锁对象,并确定占用被锁对象的第二线程的线程标识;根据第一线程的线程标识、以及第二线程的线程标识,确定至少一个死锁组的标识,死锁组包括处于循环等待状态下的至少一个第一线程和至少一个第二线程。该方法通过处于阻塞状态的第一线程和占用被锁对象的第二线程,确定死锁组,从而定位到死锁,提升了死锁检测的效率和准确度。
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种死锁检测方法、装置、设备及计算机可读存储介质。
背景技术
现有技术中当安卓系统android的应用程序在UI(User Interface,用户界面)线程被阻塞太长时间,就会出现ANR(Application Not Responding,应用程序无响应),通常出现ANR,系统会弹出一个提示提示框,让用户知道,该应用程序正在被阻塞,是否继续等待还是关闭。对于安卓系统android死锁造成的ANR的问题,除了可以捕获主线程堆栈外,还可以通过获取/data/anr/traces.txt文件,trace文件中包含了线程信息和锁的信息,借助trace文件可以分析卡死的原因。但是,随着android版本升高,安全性也做了提高,在android 8及以上的版本且没有获得android的超级用户权限的机器上,应用程序app已无权限获取/data/anr/traces.txt文件,因此,对于死锁的问题就无法定位解决了。
发明内容
本申请针对现有的方式的缺点,提出一种死锁检测方法、装置、电子设备及计算机可读存储介质,用以解决如何检测到死锁的问题。
第一方面,本申请提供了一种死锁检测方法,包括:
获取目标线程集合中的每一第一线程的线程标识,目标线程集合包括至少一个第一线程,第一线程在运行过程中处于阻塞状态;
对于每一第一线程,确定该第一线程等待占用的被锁对象,并确定占用被锁对象的第二线程的线程标识;
根据第一线程的线程标识、以及第二线程的线程标识,确定至少一个死锁组的标识,死锁组包括处于循环等待状态下的至少一个第一线程和至少一个第二线程。
可选地,获取目标线程集合中的每一第一线程的线程标识,包括:
确定与目标线程集合对应的处于操作系统的第一层的线程对象;
通过反射方式得到线程对象中的成员对象;
通过成员对象,获取目标线程集合中的每一第一线程的线程标识。
可选地,通过成员对象,获取目标线程集合中的每一第一线程的线程标识,包括:
通过成员对象,确定线程对象处于操作系统的第二层的地址;
根据线程对象处于第二层的地址和预设的地址偏移量,确定目标线程集合中的每一第一线程的线程标识的存储地址;
从每一第一线程的线程标识的存储地址,获取每一第一线程的线程标识。
可选地,第一层包括应用框架层,第二层包括系统运行库层。
可选地,确定该第一线程等待占用的被锁对象,包括:
调用预设的第一函数,确定该第一线程等待占用的被锁对象,第一函数包括私有函数GetContendedMonitor。
可选地,确定占用被锁对象的第二线程的线程标识,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010785310.4/2.html,转载请声明来源钻瓜专利网。