一,工具简介
offwaketime工具用于追踪和分析 Linux 系统中线程的 Off-CPU 时间,即线程不在 CPU 上执行的时间。特别地,它还关注哪些线程(唤醒者)唤醒了之前处于阻塞或休眠状态的线程。这对于性能分析和调试非常有用,尤其是当你想知道为什么某个线程在一段时间内没有执行时。
它可以显示被阻塞和“off-CPU”的内核堆栈跟踪和任务名称,以及唤醒它们的线程的堆栈跟踪和任务名称,以及从它们被阻塞到被唤醒时的总经过时间。这结合了offwaketime和wakeuptime工具的总结。时间测量将与off-CPU时间非常相似,但是,off-CPU时间可能包括一点额外的时间,该时间花费在等待运行队列被调度上。组合的堆栈、任务名称和总时间在内核上下文中进行了总结,以提高效率,使用eBPF映射。
输出摘要将进一步帮助你确定线程阻塞的原因,并量化从阻塞到唤醒的时间。这涵盖了所有类型的阻塞活动:磁盘I/O、网络I/O、锁、页面错误、交换、休眠、非自愿上下文切换等。
二,代码示例
#!/usr/bin/env python
from __future__ import print_function
from bcc import BPF
from time import sleep
import argparse
import signal
import errno
from sys import stderr
# 参数校验
def positive_int(val):
dest = []
# Filter up to 5 pids, arbitrary
args_list = val.split(",", 5)
pids_to_add = min(len(args_list), 5)
for i in range(pids_to_add):