0

0

进程 D 状态卡在 [kswapd0] 的 vmpressure 与 swap 压力

舞姬之光

舞姬之光

发布时间:2026-01-31 10:55:02

|

310人浏览过

|

来源于php中文网

原创

kswapd0 长期处于 D 状态并频繁触发 vmpressure,主因是 I/O 阻塞(如慢速 swap 设备、dirty page 未刷盘或文件系统元数据阻塞),vmpressure 仅为内存回收压力的信号而非原因;需通过栈追踪、iostat 和 /proc/swaps 综合诊断。

进程 d 状态卡在 [kswapd0] 的 vmpressure 与 swap 压力

为什么 kswapd0 会卡在 D 状态且持续触发 vmpressure

kswapd0 是内核的异步内存回收线程,D 状态(uninterruptible sleep)本身正常,但长期卡住说明它正在等待 I/O 完成——通常是 swap 设备写入慢或阻塞。此时 vmpressure 事件频繁上报,不是原因而是信号:内核检测到页面回收压力陡增,已开始向用户态(如 systemd、low-memory-killer)广播内存紧张信号。

常见诱因包括:

  • swap 分区位于高延迟设备(如机械盘、USB 盘、网络块设备)
  • swap 被禁用但 vm.swappiness=100 或类似配置仍驱使内核积极换出匿名页
  • 存在大量 dirty page 未刷盘,kswapd0 在 wait_event() 中等 writeback 完成
  • ext4/xfs 文件系统在日志提交或元数据更新时阻塞页回收路径

vmpressure 事件是否真的代表该杀进程?

不一定。Linux 的 vmpressure 是分等级的信号(low/medium/critical),仅 critical 才暗示 OOM 风险临近。很多容器运行时或 systemd 服务会监听 medium 就提前释放缓存或降级服务,造成误判。

验证方法:

  • 查实时压力等级:cat /proc/vmstat | grep -i vmpressure
  • 看当前状态:cat /sys/fs/cgroup/memory/memory.vmpressure(cgroup v1)或使用 systemctl show --property=MemoryPressure(systemd v249+)
  • 注意:若 vmpressure 持续为 mediumMemAvailable > 500MB,大概率是回收路径被阻塞,而非真缺内存

如何快速判断是不是 swap I/O 卡死?

直接看 kswapd0和 I/O 等待目标:

元典智库
元典智库

元典智库:智能开放的法律搜索引擎

下载
  • 获取线程栈:cat /proc/$(pgrep kswapd0)/stack,若末尾是 __swap_writepagesubmit_biowait_on_page_writeback,基本锁定 swap 写入阻塞
  • 检查 swap 设备状态:swapon --show=NAME,TYPE,SIZE,USED,PRIORITY,再用 iostat -x 1 观察对应设备的 %utilawait
  • 确认 swap 是否启用:若 free -h 显示 Swap: 全为 0,但 /proc/swaps 非空,可能是 swap 分区已 disable 但未 umount,残留脏页无法回收

典型错误配置:vm.swappiness=200(超出合法范围 0–100),会导致内核行为异常,部分版本会静默截断为 100,但某些补丁分支可能引发回收逻辑紊乱。

临时缓解与根治建议

临时手段只能绕过阻塞点,不能替代诊断:

  • 紧急停用低效 swap:swapoff /dev/sdXN(确保 Free + Buffers + Cached > 当前 SwapUsed,否则触发 OOM Kill)
  • 降低回收激进度:sysctl vm.swappiness=10(避免过度换出)
  • 加速脏页落盘:sysctl vm.dirty_ratio=20 && sysctl vm.dirty_background_ratio=10(防止脏页堆积拖慢 kswapd0

根治必须定位 I/O 瓶颈:如果是 NVMe 盘却出现高 await,检查是否启用了 nomerges 或驱动 bug;如果是 LVM 上的 swap,确认 lvconvert --repair 无元数据损坏;容器环境则需检查是否绑定了慢速 host swap 而非使用 memory cgroup 限流。

最容易被忽略的一点:即使你没配 swap,kswapd0 仍会活跃——它负责所有 page reclaim,包括 slab、page cache 和匿名页。D 状态卡住,往往不是 swap 本身的问题,而是底层块层或文件系统在某次 writeback 中死锁或响应超时。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

398

2023.07.18

堆和栈区别
堆和栈区别

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

575

2023.08.10

堆和栈的区别
堆和栈的区别

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

398

2023.07.18

堆和栈区别
堆和栈区别

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

575

2023.08.10

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

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

525

2023.08.10

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

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

1415

2023.06.21

如何安装LINUX
如何安装LINUX

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

706

2023.06.29

linux find
linux find

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

296

2023.06.30

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.2万人学习

Git 教程
Git 教程

共21课时 | 3.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号