讲师中心 微信公众号
AI工具推荐 视频效率加速

进程卡在 D 状态 [kthreadd] / [kswapd0] 的深层原因定位

小杰同学_4622

小杰同学_4622

发布时间:2026-01-30 20:42:01

|

279人浏览过

|

来源于php中文网

原创

kthreadd 和 kswapd0 卡在 D 状态是因等待不可中断资源:kthreadd 通常因子线程初始化挂起,kswapd0 则多因内存压力下 I/O 或锁阻塞;需查 /proc/pid/stack 定位具体等待点,并结合 vmstat、slabtop 与 cgroup 配置综合分析。

进程卡在 d 状态 [kthreadd] / [kswapd0] 的深层原因定位

为什么 kthreadd 和 kswapd0 会卡在 D 状态?

D 状态(Uninterruptible Sleep)不是“卡死”,而是内核线程正在等待不可被信号中断的底层资源,比如磁盘 I/O 完成或内存页回收锁。对 kthreadd 来说,它本身是内核线程的父进程,几乎不直接执行耗时操作——真正卡住的往往是它派生出的子线程(如 kswapd0、khugepaged)。而 kswapd0 卡在 D 状态,90% 以上指向内存压力 + 回收路径阻塞,常见于:慢速存储(如 NFS、iSCSI 后端卡顿)、ext4 的 journal 提交延迟、或 cgroup v1 下 memory.limit_in_bytes 触发的强制同步回收。

用 /proc/[pid]/stack 看清到底卡在哪一行

别只看 ps 或 top,它们只能告诉你状态是 D,但不知道等什么。直接读内核栈:

cat /proc/$(pgrep kswapd0)/stack

典型输出中若出现:

  • __rwsem_down_read_failed → 表示在等某个读写信号量(比如 shrinker 链表被其他 CPU 持有)
  • wait_on_page_bit_common → 正在等某页的 PG_locked 标志清除,常见于该页正被 writeback 或 swapout
  • ext4_writepages 或 nfs_updatepage → 存储后端响应超时,I/O 请求挂在队列里没返回

注意:kthreadd 自身栈通常很短(只有 kthreadd 函数调用),如果它也显示 D,大概率是它刚 fork 出子线程后,子线程还没完成初始化就被调度器挂起——这时应优先查子线程(如 kswapd0)的栈。

Rydberg Agent Node
Rydberg Agent Node

使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r

下载

vmstat 1 和 slabtop 联合判断回收瓶颈类型

D 状态持续时间长 ≠ 内存不足,可能是回收效率崩溃。观察关键指标:

  • 若 vmstat 1 中 si(swap-in)持续 > 0,但 so(swap-out)极低 → kswapd0 在反复尝试回收却失败(如所有可回收页都被 mlock() 锁住)
  • 若 free 列稳定但 buff/cache 不降,且 slabtop 显示 dentry 或 inode_cache 占用飙升 → shrinker 未及时触发,或 nr_shrinker_deferred 非零(说明 shrinker 被跳过)
  • pgpgin/pgpgout 值极小,但 pgmajfault 暴涨 → 进程频繁缺页,而 kswapd0 无法及时分配新页,可能因 zone watermark 设置过严(/proc/sys/vm/lowmem_reserve_ratio 异常)

cgroup v1 下 memory.limit_in_bytes 是隐形杀手

在 cgroup v1 环境中,一旦容器内存接近 memory.limit_in_bytes,内核会强制走同步回收路径(try_to_free_pages),此时 kswapd0 会被绕过,由触发缺页的用户进程自己调用回收逻辑——但若该进程又依赖其他被锁资源(如 ext4 的 journal_lock),就会导致整个回收链路卡在 D 状态,且栈中看不到 kswapd0,反而看到用户进程卡在 do_swap_page。验证方法:

grep -r "limit_in_bytes" /sys/fs/cgroup/memory/ | xargs -n1 cat 2>/dev/null | grep -v "^0$"

只要非零值存在,就需检查对应 cgroup 的 memory.usage_in_bytes 是否长期 > 90% limit,并确认是否启用了 memory.swappiness=0(这会让内核拒绝 swap,加剧直接回收压力)。

这类问题最难排查,因为表象是 kswapd0 无响应,实际根因在 cgroup 配置和 swappiness 的组合效应上——而 /proc/[pid]/stack 里根本看不到 cgroup 相关函数名。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5747

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2468

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4158

2023.08.10

磁盘配额是什么
磁盘配额是什么

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

4070

2023.06.21

如何安装LINUX
如何安装LINUX

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

3473

2023.06.29

linux find
linux find

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

2673

2023.06.30

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

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

6490

2023.07.05

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

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

6142

2023.07.06

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebSocket手册
WebSocket手册

共0课时 | 0人学习

HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 10.9万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 28.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn