本文主要是介绍5.22 BCC工具之deadlock.py解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一,工具简介
deadlock工具用于检测运行进程中的潜在死锁(锁顺序反转),但它不适用于共享互斥锁或递归互斥锁。
它可以跟踪pthread互斥锁(mutex)的锁定和解锁调用,以构建一个表示互斥锁等待图的有向图:
- 图中的节点代表互斥锁。
- 如果存在某个线程T,在该线程中先调用了lock(A),然后调用了lock(B),再调用unlock(A),则存在边(A, B)。
如果程序发现潜在的锁顺序反转,程序将转储互斥锁的循环和每个互斥锁被获取时的堆栈跟踪,然后退出。
此程序只能找到在程序跟踪进程时发生的潜在死锁。它无法找到在程序附加到进程之前可能已经发生的死锁。
由于这会跟踪被跟踪进程上的所有互斥锁的锁定和解锁事件以及所有线程创建事件,因此,如果进程具有许多线程和互斥锁,则此bpf程序的开销可能会非常高。您应该只在可以接受减慢速度的进程上运行此程序。
对于共享(读写)互斥锁,死锁需要等待图中的一个循环,其中循环中的至少一个互斥锁正在获取独占(写)所有权。
对于递归互斥锁,对同一个互斥锁多次调用lock()。但是,在互斥锁创建后,无法确定互斥锁是否是递归互斥锁。因此,此工具将不会找到只涉及一个互斥锁的潜在死锁。
二,代码示例
#!/usr/bin/env pythonfrom __future__ import (absolute_import, division, unicode_literals, print_function
)
from bcc import BPF
from collections import defaultdict
imp
这篇关于5.22 BCC工具之deadlock.py解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!