游乐游手机版
首页/系统平台/文章详情

Linux查看磁盘占用原因分类统计的方法

时间:2026-08-15 18:18
proc [pid] status 可以把进程内存按更细的维度拆分展示,同时提供一组非常关键的运行状态信息:例如 VmData(堆内存)、VmStk(栈内存)、VmExe(代码段)、VmLib(共享库)、VmRSS(包含共享页的驻留内存);此外,还能看到 State、Threads、上下文切换次数

/proc/[pid]/status 可以把进程内存按更细的维度拆分展示,同时提供一组非常关键的运行状态信息:例如 VmData(堆内存)、VmStk(栈内存)、VmExe(代码段)、VmLib(共享库)、VmRSS(包含共享页的驻留内存);此外,还能看到 State、Threads、上下文切换次数以及 CapEff 等常用排查与诊断字段。

Linux怎么查看占用原因分类统计

直接读 /proc/[pid]/status 获取内存用途硬分类

如果你想弄清 Linux 进程内存占用到底“花在了哪里”,不要只看 top 的 RES 或 ps 的 RSS ——它们只是汇总值,无法区分堆、栈、代码段和共享库。真正能够按用途拆分查看的,是内核直接提供的原始快照:/proc/[pid]/status。

这个文件中的 VmData、VmStk、VmExe、VmLib、VmRSS 等字段,是内核按照内存用途进行的强制分类,没有采样、不做聚合、也不是估算值,反映的是当前实际映射状态。

  • VmData:堆内存(brk/sbrk、大部分 malloc 分配)
  • VmStk:用户栈内存(通常较小,固定上限一般约为 8 MB)
  • VmExe:可执行文件对应的代码段(.text)
  • VmLib:所有共享库(如 libc.so、libpthread.so)的映射大小
  • VmRSS:当前驻留在物理内存中的总量(包含上述内容以及共享页,不代表独占内存)

快速提取示例:
cat /proc/1234/status | grep Vm

VmRSS 不等于进程实际独占内存

很多 Linux 内存排查误判都出在这里:看到 VmRSS 是 500 MB,就直接认定这个进程“占用了 500 MB 物理内存”,结果系统明明还有大量空闲 RAM,OOM Killer 却仍然频繁触发。根本原因很简单——VmRSS 包含了共享页。

例如 10 个进程同时使用 libc.so,每个进程的 VmLib 可能都是 2 MB,VmRSS 里也都会计入这 2 MB,但实际物理内存中只存在一份 libc 代码页。内核不会对这些共享页在 VmRSS 层面做去重,因此 VmRSS 更准确地说,是“每个进程视角下的驻留页总数”。

更接近反映独占物理内存的通常是:
– VmData(堆) + VmStk(栈) + VmExe(私有代码段)
– 再减去 mmap 映射中可能存在的共享匿名区(需要结合 /proc/[pid]/maps 进一步判断)

用 smem 做共享内存去重统计

如果目标是评估“这个进程实际额外增加了多少物理内存压力”,那么 smem 往往比 ps 或 top 更可靠。它基于 /proc/[pid]/smaps,能够对共享页进行近似去重统计。

安装后可直接运行:
smem -P nginx -c "pid name uss pss rss"

关键字段含义:
– uss(Unique Set Size):该进程独占的物理内存,最接近“真实新增开销”
– pss(Proportional Set Size):共享页按照进程数量均摊后的值,适合做横向比较
– rss:等同于 VmRSS,不进行去重

需要注意:smem 通常需要 root 权限才能读取全部 smaps;非 root 用户一般只能查看自己进程的 uss/pss。

别忽略 /proc/[pid]/status 里的非内存线索

除了 Vm* 字段之外,这个文件里还包含几个在 Linux 故障排查中非常有价值、却经常被忽略的诊断线索:

  • State:进程当前的内核态状态(R运行、S可中断休眠、D不可中断休眠),比 ps 的 STAT 展示更底层
  • Threads:当前线程数量,比 ps -T -p [pid] 更直接、更快,适合排查线程泄漏问题
  • voluntary_ctxt_switches 和 nonvoluntary_ctxt_switches:主动与被动上下文切换次数;如果后者持续升高,通常意味着 CPU 竞争激烈或锁争用严重
  • CapEff:有效 capabilities,排查权限问题时通常比 getpcaps [pid] 更直观

在查看某个 PID 时,不要只执行 grep Vm ——顺手加上一句 grep -E "State|Threads|voluntary|CapEff",往往能更早发现异常模式和潜在线索。

来源:https://www.php.cn/faq/2988386.html
上一篇Linux如何查看系统引导加载器具体版本信息 下一篇Linux查看哪些进程正在读写硬盘的方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
VMware安装Ubuntu完整教程:创建虚拟机与启动验证
系统平台 · 2026-09-01

VMware安装Ubuntu完整教程:创建虚拟机与启动验证

本教程详细演示如何在VMware中创建Ubuntu虚拟机,涵盖ISO挂载、硬件配置、安装向导及启动验证。通过清晰的步骤与验证命令,帮助新手快速搭建可用的Linux学习环境。

Win10专业版U盘安装教程:制作启动盘与完整安装步骤
系统平台 · 2026-09-01

Win10专业版U盘安装教程:制作启动盘与完整安装步骤

本文提供Win10专业版U盘安装完整流程:准备8GB以上U盘与官方镜像,制作启动盘并核对盘符;通过F12 F11 Esc等快捷键或BIOS设置U盘为第一启动项;安装时选择专业版并谨慎分区;完成后在“设置—系统—关于”验证版本与激活状态。操作前务必备份数据。

Windows10系统字体太小怎么调大
系统平台 · 2026-08-27

Windows10系统字体太小怎么调大

Windows10系统字体太小怎么调大?只需两步:首先打开设置中的显示选项,将缩放比例调整为125%或150%;随后运行ClearType文本调谐器优化字体清晰度。此方法适用于高分屏及普通屏幕,无需修改注册表即可解决界面拥挤问题。

Win10磁盘占用100%基础排查:从监控到清理的完整步骤
系统平台 · 2026-08-27

Win10磁盘占用100%基础排查:从监控到清理的完整步骤

Windows 10系统出现磁盘占用100%会导致电脑卡顿、程序响应缓慢。本文提供基础排查方案:首先通过任务管理器确认是否为磁盘高负载,随后进入系统存储页面分析C盘占用类别,最后针对性清理临时文件。遵循此流程可有效缓解磁盘压力,避免盲目重装系统。

Windows10系统怎么显示此电脑和控制面板
系统平台 · 2026-08-27

Windows10系统怎么显示此电脑和控制面板

Windows10默认可能不显示桌面图标,导致找不到“此电脑”和“控制面板”。只需进入个性化设置,在“桌面图标设置”中勾选对应选项即可恢复。本文提供详细图文步骤,帮助快速找回系统入口。