用于进程中检测死锁的方法和设备技术

技术编号:16644417 阅读:51 留言:0更新日期:2017-11-26 16:45
本申请的目的是提供一种用于进程中检测死锁的方法和设备,通过基于若干执行线程所获取的锁生成对应所述节点,基于所述锁的种类及所述锁之间的获取顺序建立所述锁对应所述节点之间的有向边,针对不同的锁采取不同的建边方式避免了误判,基于所述节点及所述节点之间的有向边生成逻辑图;当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图,大大减少了拷贝逻辑图的次数,从而降低了拷贝逻辑图时与正常服务的线程存在的竞争的影响,并判断所述逻辑图是否为有向无环图,若是则确定无死锁情况,否则确定有死锁情况。更加准确的判断死锁情况和缩短检测死锁的时间。

Method and device for detecting deadlock in process

This application is intended to provide a method and apparatus for deadlock detection in the process of generating the corresponding acquired by the lock based on the number of threads of execution nodes, the variety of the lock and the lock between the acquisition in order to establish the corresponding lock between the node of the directed edges based on different lock to take a different way to avoid the misjudgment of the construction side, based on between the node and the node of the directed edge generation logic diagram; when there is abnormal state of the thread of execution, the execution thread gets the logical graph corresponding to the greatly reduced the number of copies of the logic diagram, which reduces the effect of copy the logic diagram with the normal service thread competition exists, and judging whether the logic diagram is a directed acyclic graph, determine if it is deadlock free, or determine the deadlock situation. More accurate judgment of deadlock and shorten the detection time of deadlock.

【技术实现步骤摘要】
用于进程中检测死锁的方法和设备
本申请涉及计算机领域,尤其涉及一种用于进程中检测死锁的技术。
技术介绍
随着技术的发展和用户的需求,分布式系统逐渐变的更加复杂化,而且在复杂后还需要修改来实现新的功能,为了提高系统的性能,采用了多线程的方式,因此导致在复杂的逻辑中进行修改后,容易出现死锁的问题。在死锁出现后,调查起来会比较容易,但是有很多场景在平时测试时并不能出现死锁,往往到了线上才出现死锁,就会影响集群的正常服务,导致线上故障。在某些分布式系统中,可以通过paxos来容忍失效转移(FailOver)的节点,可以通过将出现死锁的进程进行重启来规避线上运行过程中遇到死锁而影响服务的问题。在Linux中已经有了检查是否出现死锁的机制:在启动后会创建一个线程来监测所有的线程,如果有哪个线程处于不可中断的睡眠状态(D状态)超过120s,那么认为线程被夯住(hang)了,会根据配置进行操作,默认情况下只输出日志(log)并不会做其它的事情。而这种检测死锁的方法检查周期长,如果真的出现死锁,也需要经过120s才能判断出现死锁;而且容易误报,如果有线程因为操作而需要超过120s的D状态,那么会被判定本文档来自技高网...
用于进程中检测死锁的方法和设备

【技术保护点】
一种用于进程中检测死锁的方法,其中,所述方法包括:基于若干执行线程所获取的锁生成对应所述节点,基于所述锁的种类及所述锁之间的获取顺序建立所述锁对应所述节点之间的有向边,基于所述节点及所述节点之间的有向边生成逻辑图;当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图;判断所述逻辑图是否为有向无环图,若否,则确定有死锁情况。

【技术特征摘要】
2016.03.25 CN 20161017873901.一种用于进程中检测死锁的方法,其中,所述方法包括:基于若干执行线程所获取的锁生成对应所述节点,基于所述锁的种类及所述锁之间的获取顺序建立所述锁对应所述节点之间的有向边,基于所述节点及所述节点之间的有向边生成逻辑图;当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图;判断所述逻辑图是否为有向无环图,若否,则确定有死锁情况。2.根据权利要求1所述的方法,其中,所述基于所述锁的种类及所述锁之间的获取顺序确定对应所述节点之间的有向边包括:若所述锁为读锁,则判断是否有其他所述执行线程在等待写锁;若是,则建立前一所述锁对应所述节点到所述写锁对应所述节点的有向边;若否,则判断所述执行线程是否已获得所述读锁,若是则无需建立所述有向边,否则建立前一所述锁对应所述节点到所述读锁对应所述节点的有向边。3.根据权利要求2所述的方法,其中,判断所述执行线程是否已获得所述读锁包括:从所述读锁的记录信息中获取执行线程身份信息;基于执行线程身份信息,确定所述执行线程已获得所述读锁。4.根据权利要求1所述的方法,其中,所述基于所述锁的种类及所述锁之间的获取顺序确定对应所述节点之间的有向边包括:若所述锁为可重入锁,则判断所述执行线程是否已获得所述可重入锁,若是则无需建立所述有向边,否则建立前一所述锁对应所述节点到所述可重入锁对应所述节点的有向边。5.根据权利要求4所述的方法,其中,判断所述执行线程是否已获得所述可重入锁包括:从所述可重入锁的记录信息中获取执行线程身份信息;基于执行线程身份信息,确定所述执行线程已获得所述可重入锁。6.根据权利要求1所述的方法,其中,所述基于所述锁的种类及所述锁之间的获取顺序确定对应所述节点之间的有向边还包括:若所述锁为不可重入锁,则建立前一所述锁对应所述节点到所述不可重入锁对应所述节点的有向边。7.根据权利要求1所述的方法,其中,所述当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图包括:创建检测线程,利用所述检测线程定期检查所有所述执行线程的状态是否异常,当所述执行线程有状态为异常时,获取所述执行线程对应的逻辑图。8.根据权利要求1所述的方法,其中,所述判断所述逻辑图是否为有向无环图包括:基于遍历算法对所述逻辑图进行遍历;若至少一个所述遍历路径存在至少一个所述节点被遍历至少两次,则确定所述逻辑图不是有向无环图,否则确定所述逻辑图是有向无环图。9.一种用于进程中检测死锁的设备,其中,所述设备包括:生成装置,用于基于若干执行线程所获取的锁生成对应所述节点,基于所述锁的种类及所述锁之间的获取顺序建立所述锁对应所述节点...

【专利技术属性】
技术研发人员:刘俊峰姚文辉朱家稷
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1