Linux怎么查看具体的内核运行死锁调试报告

夏静大大_8150

夏静大大_8150

2026-08-30

886人浏览

原创

lockdep报告只在检测到死锁或循环依赖时输出且必须已启用配置,若dmesg无结果,先验证config_prove_locking=y和/proc/sys/kernel/lockdep=1是否生效,报告必出现在dmesg中,典型开头为“warning: possible circular locking dependency detected”,含锁名、调用点、栈回溯及依赖图。

linux怎么查看具体的内核运行死锁调试报告

内核死锁触发后,dmesg 里看不到报告怎么办

Lockdep 报告默认只在真正检测到死锁或循环依赖时才输出,且必须已启用相关配置。如果 dmesg | grep -i "deadlock\|lockdep\|WARNING" 没结果,大概率是 Lockdep 根本没开,或者死锁还没触发(只是卡住但未满足 Lockdep 的检测条件)。

先确认是否启用:

  • cat /proc/sys/kernel/lockdep 返回 1 表示运行时已启用(需 CONFIG_LOCKDEP=y 编译)
  • grep CONFIG_PROVE_LOCKING /boot/config-$(uname -r) 必须输出 CONFIG_PROVE_LOCKING=y
  • grep CONFIG_LOCKDEP /boot/config-$(uname -r) 必须为 y,否则整个机制不可用

注意:仅设置 /proc/sys/kernel/lockdep=1 不够——它只是打开运行时开关,底层编译选项缺一不可。很多发行版内核(如 Ubuntu standard kernel)默认关闭 CONFIG_LOCKDEP,此时写入 /proc/sys/kernel/lockdep 会失败或静默忽略。

死锁发生后,关键日志在哪看

一旦 Lockdep 捕获到问题,报告一定出现在 dmesg 输出中,不会写入文件或 syslog。典型开头是:

WARNING: possible circular locking dependency detected
------------------------------------------------------
kworker/0:2/42 is trying to acquire lock:
 (&sb->s_type->i_mutex){+.+.}, at: [] ext4_file_write_iter+0x12a/0x3c0
but task is already holding lock:
 (&sb->s_type->i_mutex){+.+.}, at: [] ext4_file_write_iter+0x12a/0x3c0

这类报告包含三部分:

  • 锁的符号名(如 &sb->s_type->i_mutex)和调用点地址(ext4_file_write_iter+0x12a/0x3c0)
  • 当前线程栈回溯(Call Trace: 后面一长串函数)
  • 锁依赖图(-> #1 (&sb->s_type->i_mutex){+.+.} 等层级缩进)

不要跳过最后的依赖图——它明确指出哪两个锁路径交叉形成了环,这才是定位 AB-BA 死锁的核心依据。

为什么 /proc/lockdep 和 /proc/lockdep_chains 是空的

这两个文件只在 Lockdep 已启用且**至少触发过一次警告**后才生成有效内容。/proc/lockdep 显示当前已注册的锁类数量;/proc/lockdep_chains 则列出所有已记录的锁依赖链。它们不是实时监控接口,而是事后快照。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载

常见误操作:

  • 以为 cat 这两个文件就能“主动扫描”死锁——实际它们不触发检测,只反映历史积累
  • 在没复现 bug 的情况下反复查看,结果自然是空
  • 混淆 /proc/lock_stat(需 CONFIG_LOCK_STAT=y)——它统计锁争用耗时,和死锁检测无关

真正要查锁竞争热点,用 echo 1 > /proc/sys/kernel/lock_stat 再跑负载,然后看 /proc/lock_stat;但别指望它告诉你哪里死锁了。

用户态进程卡死,但 dmesg 没 Lockdep 日志,该看什么

这是最常被混淆的场景:你看到某个进程 ps 显示状态为 D 或长时间停在 futex_wait_queue_me,但内核没报 Lockdep 警告——说明问题不在内核锁逻辑,而在用户态同步原语或 I/O 阻塞。

此时应转向:

  • cat /proc/<pid>/stack</pid> 看内核态调用栈,确认是否真卡在锁上(如 futex_wait、mutex_lock)
  • pstack <pid></pid> 或 gdb -p <pid> -ex "thread apply all bt" -ex quit</pid> 查用户态线程阻塞点
  • strace -p <pid></pid> 观察系统调用是否卡在 pthread_mutex_lock、sem_wait 等
  • lsof -p <pid></pid> 检查是否因文件锁(flock)、socket 或设备节点阻塞

内核 Lockdep 只管内核锁(spinlock/mutex/rwsem),对用户态 pthread_mutex_t 完全无感知——那是 glibc 和 futex 的事。

真正难啃的是那种既没 Lockdep 日志、又没明显用户态阻塞点的情况:比如软锁死(soft lockup)导致 CPU 卡死,但锁本身没循环依赖。这时候得盯紧 dmesg 里 BUG: soft lockup 和 NMI watchdog 的堆栈,而不是徒劳刷新 /proc/lockdep。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4070

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3473

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2673

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6490

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6142

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3573

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3065

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3299

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习