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

大量脏页但 iostat 看不出哪个盘特别忙的匿名页/缓存排查

梦伟吖_8659

梦伟吖_8659

发布时间:2026-01-25 14:41:02

|

325人浏览过

|

来源于php中文网

原创

脏页堆积但iostat无磁盘热点,主因是swap、tmpfs或共享匿名映射产生的脏页不经过块设备I/O路径;需查pswpout、/proc/swaps、tmpfs使用量及mmap(MAP_ANONYMOUS|MAP_SHARED)进程。

大量脏页但 iostat 看不出哪个盘特别忙的匿名页/缓存排查

脏页堆积但 iostat 无明显磁盘热点,先确认脏页来源类型

Linux 的 dirty_pages 不一定都来自文件系统写回——匿名页(如进程堆、mmap 私有匿名区)的换出(swap)也会产生脏页,但这类页不走 pdflushwriteback 路径,不会触发块设备写请求,因此 iostat 看不到对应磁盘 activity。此时 /proc/meminfo 中的 Dirty:Writeback: 可能偏高,但 pgpgout(每秒换出页数)和 pswpin/pswpout(swap in/out 次数)才是关键线索。

  • 运行 grep -E "Dirty|Writeback|pgpgout|pswpin|pswpout" /proc/vmstat,若 pswpout 显著上升而 pgpgout 增长平缓,基本可断定是 swap 引起的脏页堆积
  • 检查 /proc/swaps 是否启用 swapfile 或 swap partition;用 swapon --show=NAME,TYPE,SIZE,USED,PRI 确认活跃 swap 设备
  • 注意:即使 swapon -s 显示 swap 已关闭,内核仍可能因 vm.swappiness=100 或内存压力在 tmpfs(如 /dev/shm)上触发匿名页回收,这部分页会标记为 dirty 但不落地到磁盘

排查 tmpfs 和 shm 匿名页污染

tmpfs 是基于内存的文件系统,其内容本质是匿名页,且默认可被 swap。当应用往 /dev/shm 或自挂载的 tmpfs 写入大量数据(如数据库 shared memory segment、大 buffer mmap),这些页一旦变 dirty,就计入 Dirty: 统计,但不会触发块设备 I/O——因为没磁盘后端。

jinn-node
jinn-node

在Jinn网络为自主项目工作赚取代币奖励,让闲置的OpenClaw代理开始工作。

下载
  • df -t tmpfs 查看所有 tmpfs 挂载点使用量,重点关注 /dev/shm/run/sys/fs/cgroup 下的子挂载
  • 对可疑挂载点执行 find /dev/shm -type f -ls | sort -k7nr | head -10,找大文件或已删除但未释放的“幽灵文件”(lsof +L1 可辅助定位)
  • 临时禁用 tmpfs swap 行为:挂载时加 noexec,nosuid,nodev,mode=1777,size=2G,mpol=bind:0 并设 vm.mmap_min_addr=65536 减少 mmap 分配风险;长期方案需控制应用内存使用模式

确认是否 mmap(MAP_ANONYMOUS|MAP_SHARED) 导致脏页无法回收

共享匿名映射(mmap(..., MAP_ANONYMOUS|MAP_SHARED))产生的页,在 fork 后被子进程修改时会触发写时复制(COW),但若父/子均未调用 msync(MS_SYNC)munmap,这些页会持续处于 dirty 状态,且不归属任何文件,无法通过 syncecho 3 > /proc/sys/vm/drop_caches 清理。

  • cat /proc/[pid]/maps | grep -E "anon|shared" | awk '{print $5,$6}' | sort | uniq -c | sort -nr 扫描各进程的匿名共享映射大小
  • 结合 pstack [pid]lsof -p [pid] | grep mem 判断是否为数据库(PostgreSQL shared memory)、JVM(-XX:+UseSHM)、或自定义 IPC 使用了该模式
  • 这类页的生命周期由进程控制:只有进程退出、显式 munmap 或触发 OOM killer 才会真正释放;echo 1 > /proc/sys/vm/compact_memory 对它们无效

为什么 iostat 看不出问题?关键在 writeback vs swap vs tmpfs 路径分离

iostat 统计的是 blk_mq_make_request 层面的块设备 I/O,只覆盖文件系统 writeback 和 swap device I/O。而 tmpfs 页面回收走的是 shrink_slabshrink_page_listtry_to_unmap 路径;匿名页 swap out 走的是 swap_writepagesubmit_bio,但如果 swap 是 file-backed(swapfile),且该文件本身在 ext4/xfs 上,I/O 会被归入对应 block device;但若 swap 是 LVM LV 或 zram,iostat -x 需指定对应设备名(如 zram0)才可见。

  • 运行 iostat -x 1 3 时务必加上 -d 参数并列出所有块设备:lsblk -d -o NAME,TYPE,SIZE,ROTA,MODEL,避免漏看 zram、loop、nvme ns
  • cat /proc/buddyinfocat /proc/pagetypeinfo 可辅助判断是否因内存碎片导致 direct reclaim 频繁,进而推高 dirty page 回收延迟
  • 最易忽略的一点:某些容器运行时(如 containerd + overlayfs)在 /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs 下创建的 tmpfs mount,其 dirty 页完全不可见于宿主机 iostat,必须进容器命名空间查

热门AI工具

更多
WorkBuddy

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

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞智作

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

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

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

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

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

火山引擎

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

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2200

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

229

2026.02.03

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

1098

2023.09.04

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

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

4367

2023.07.18

堆和栈区别
堆和栈区别

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

2028

2023.08.10

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3969

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

607

2023.11.16

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

120

2026.09.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习

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

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