当前位置:首页 > 文章列表 > 文章 > linux > Linux tmpfs 使用率高时怎么判断是缓存还是空间不足

Linux tmpfs 使用率高时怎么判断是缓存还是空间不足

来源:17golang原创 2026-09-08 21:22:12 0浏览 收藏

Linux 上看到 /dev/shm/run 或自定义 tmpfs 的使用率很高,先不要急着把它当成“内存泄漏”。df 高说明这个 tmpfs 挂载实例的块空间接近上限;是否已经造成物理内存压力,还要结合 /proc/meminfo 里的 ShmemMemAvailable 和 swap。若 df 明显高于 du,再查删除后仍被进程打开的文件。

最实用的判断顺序是:df -h 看挂载空间,du -x 看可见文件,df -i 看 inode,Shmem 看系统级共享内存,最后用 lsof +L1 解释“看不见但没有释放”的占用。
要点速览
  • tmpfs 的 size= 是挂载实例上限,不等于已经消耗的物理内存。
  • dfdudf -i 观察的是不同维度,三者不一致本身就是线索。
  • 清理前先确认文件属于哪个服务;删除仍打开的文件要让持有它的进程关闭或重启文件句柄。

先区分 tmpfs 的上限、已用块和真实内存压力

tmpfs 把文件放在内核的内存文件系统中,页面在有 swap 时也可能被换出。这里有三个容易混淆的数字:挂载参数中的 size 是“最多允许分配多少”,df 的 Used 是“这个实例已经分配了多少”,而系统是否紧张要看全局可用内存和换页活动。没有显式指定 size 时,Linux 内核文档给出的默认值是物理内存的 50%,但这只是上限,不是预留量。

# 把 MOUNT_POINT 换成实际的 tmpfs 挂载点
MOUNT_POINT=/dev/shm

# 查看文件系统类型、大小、已用、可用和挂载选项
findmnt -no TARGET,FSTYPE,SIZE,USED,AVAIL,USE%,OPTIONS "$MOUNT_POINT"
df -hT "$MOUNT_POINT"

# 观察系统级共享内存、可用内存和 swap,而不是只看 tmpfs 百分比
grep -E '^(MemAvailable|Shmem|SwapFree|SwapTotal):' /proc/meminfo
free -h
swapon --show

如果 df 已到 90% 以上,但 MemAvailable 仍充足、swap 没有持续增长,优先把它视为挂载容量或文件生命周期问题;如果 Shmem 同时很大、可用内存持续下降并伴随换页,再按内存压力处理。要注意,Shmem 是系统级统计,除了 tmpfs 还可能包含 System V/POSIX 共享内存和共享匿名映射,不能直接当成某一个挂载点的精确用量。

tmpfs挂载上限、已分配块、page cache、swap与Shmem的分层关系
图1:tmpfs 的挂载上限、已分配块和系统 Shmem 分属不同观察层,排查时要把这些读数放在一起解释。

用 df、du 与 df -i 对照块空间、可见文件和 inode

把三个命令的角色分开,排查会快很多。df -h 从文件系统角度看块空间;du -xhd1 沿目录树统计能看到的文件;df -i 看 inode 是否先耗尽。tmpfs 里小文件很多时,容量尚有余量但 inode 接近 100%,同样会导致创建失败。

# 先确认目标挂载点的块空间和 inode
df -h "$MOUNT_POINT"
df -ih "$MOUNT_POINT"

# -x 不跨到其他文件系统;按一级目录汇总可见文件
du -xhd1 "$MOUNT_POINT" 2>/dev/null | sort -h

# 继续定位最大的可见目录或文件
du -xah "$MOUNT_POINT" 2>/dev/null | sort -h | tail -n 20

常见组合可以这样读:df 高、du 也高,通常是可见文件确实占满了空间;df 高、du 低,重点转向已删除仍打开的文件或统计范围不一致;df -i 高而块空间不高,则优先检查小文件数量。du 统计的是可见目录树,所以不要用它单独证明“内存已经释放”。

df块空间、du可见目录树、df-i inode与lsof持有进程的关系
图2:df、du 和 df -i 分别观察块、可见目录树和 inode;删除但仍打开的文件需要通过 lsof 另找持有者。

当 df 高而 du 低:查删除后仍打开的文件

进程打开文件后,即使路径被 rm 删除,只要文件描述符还在,文件内容仍可能被进程使用;目录树看不到它,挂载统计却还没有下降。这是“清理过了但空间不回来”的典型线索。

看到结果后不要直接杀进程。先确认 PID 属于哪个服务、文件是否是日志或临时数据,再选择让应用执行日志 reopen、关闭句柄,或在维护窗口重启服务。若服务没有优雅的 reopen 能力,重启前要评估连接、队列和未落盘数据。处理后重新比较 dfdu,只把空间下降作为释放完成的信号。

按证据选择清理、限额调整或应用修复

不要用“把 size 调大”替代定位。若可见文件增长是业务缓存失控,先加生命周期和清理策略;若 inode 紧张,减少碎片化小文件或调整文件组织;若删除后仍打开,修复日志轮转或句柄关闭;只有确认机器有足够内存、swap 策略也符合预期时,才考虑 remount 调整上限。

临时文件的内容在卸载 tmpfs 后会丢失,因此清理或卸载前必须确认它不是共享内存、运行时 socket 或应用正在使用的数据。生产环境最好把 df 使用率、inode 使用率、ShmemMemAvailable 和 swap 使用趋势分别监控,避免把挂载容量告警和内存告警混成一条。

相关问题

tmpfs 使用率高是不是一定会触发 OOM?

不一定。它首先说明挂载实例的空间接近上限;是否触发 OOM 还取决于系统可用内存、swap、其他进程和实际分配压力。

为什么 du 显示很小,df 却接近 100%?

先确认两者针对的是同一个挂载点和同一目录范围,再用 lsof +L1 查删除后仍打开的文件,同时排除 inode 耗尽和权限导致的统计不完整。

参考:Linux Kernel tmpfs 文档tmpfs(5)proc_meminfo(5)

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go testing.T Cleanup 怎么登记测试资源清理Go testing.T Cleanup 怎么登记测试资源清理
上一篇
Go testing.T Cleanup 怎么登记测试资源清理
Go JSON Unmarshal 复用结构体时旧指针字段为什么残留
下一篇
Go JSON Unmarshal 复用结构体时旧指针字段为什么残留
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    30次使用
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    187次使用
  • C-Eval中文评测基准:大语言模型多学科能力评估指南
    C-Eval
    深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
    120次使用
  • AI Prompt Library:免费AI提示词库,助力ChatGPT高效创作与营销
    AI Prompt Library
    探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
    46次使用
  • Generrated:DALL·E 2/3 AI绘画提示词灵感库与图像对比平台
    Generrated
    Generrated汇集9300+张DALL·E生成图像及对应提示词,支持查看完整图集、对比DALL·E 2与3版本差异,是AI绘图新手学习Prompt设计与获取创作灵感的实用工具。
    28次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码