当前位置: 首页 > news >正文

为什么top和/proc/pid/statm、/proc/pid/statm 统计的内存结果不同

在 Linux 系统中,存在多种内存占用统计方式,如top命令、/proc/[pid]/statm/proc/[pid]/status,本文介绍 一下这几种统计方式的区别。

1. 数据来源与本质

  • /proc/[pid]/statm/proc/[pid]/status它们是内核直接向用户空间暴露的进程内存原始数据文件,属于proc文件系统的一部分。内核会实时更新这些文件的内容,反映进程当前的内存状态。程序或工具(如top)获取进程内存信息时,本质上都是从proc文件系统读取基础数据(只是可能会做二次加工)。
  • top命令它是一个用户态的监控工具,数据最终来源于proc文件系统(主要是/proc/[pid]/stat/proc/[pid]/statm/proc/[pid]/status等),但会对原始数据进行加工、转换和聚合,并以更友好的方式展示(如动态刷新、单位转换、排序等)。

2. 核心内存指标的定义差异

三者最常关注的内存指标是虚拟内存(VIRT/VSize)物理内存(RES/RSS),但定义和计算方式有细微区别:

指标top命令/proc/[pid]/statm/proc/[pid]/status
虚拟内存显示为VIRT,表示进程使用的总虚拟地址空间大小,包括未分配的虚拟内存、已分配但未使用的内存、文件映射(如代码段、库)等。单位可能自动转换为 KB/MB/GB。第一个数值size,表示进程使用的总虚拟内存页数,乘以系统页大小(通常 4KB)即为虚拟内存大小(KB)。统计范围与VIRT一致,但以 “页数” 为单位。字段VmSize,直接给出虚拟内存总大小(单位 KB),定义与statmsize完全一致(VmSize = size * 页大小)。
物理内存显示为RES,表示进程实际使用的物理内存大小(驻留集大小),但通常不包含被交换到磁盘的内存,且可能仅计算 “私有部分”(或对共享内存按比例计算)。第二个数值resident,表示进程驻留的物理内存页数,乘以页大小即为物理内存(RSS)。统计的是所有驻留物理页(包括共享内存的完整大小,而非按比例)。字段VmRSS,直接给出物理内存大小(单位 KB),定义与statmresident完全一致(VmRSS = resident * 页大小)。

3. 关键差异点

(1)共享内存的统计方式

  • statmstatusVmRSS完整统计共享内存的大小(例如进程 A 和 B 共享 1MB 内存,两者的VmRSS都会各加 1MB)。
  • topRES可能会对共享内存进行按比例计算(例如上述场景,A 和 B 的RES可能各加 0.5MB),避免重复统计。这是两者数值差异的常见原因。

(2)单位与精度

  • statm以 “内存页” 为单位(需乘以系统页大小转换为 KB),status直接以 KB 为单位,精度固定。
  • top会根据数值大小自动转换单位(KB/MB/GB),显示时可能四舍五入,导致与原始数据有微小偏差。

(3)包含的内存类型

  • topVIRT可能包含更多 “间接” 虚拟内存(如临时映射的设备内存),而statmsizestatusVmSize更贴近进程直接分配的虚拟地址空间。
  • 对于未实际使用的虚拟内存(如malloc分配但未写入的内存),statmstatus仍会统计到虚拟内存中,但topRES可能不统计(因为未分配物理页)。

(4)时效性

  • proc文件系统的内容是实时更新的,读取时即为当前状态。
  • top默认每 3 秒刷新一次数据,且刷新时可能存在微小延迟(用户态工具的处理耗时)。

4. 适用场景

  • /proc/[pid]/statm:适合程序中快速读取内存信息(格式简单,仅有数值),但需要手动转换单位。
  • /proc/[pid]/status:适合需要详细内存指标(如VmDataVmStkVmExe等细分项)的场景,可读性更好。
  • top命令:适合人工实时监控进程状态,支持排序、筛选,更直观但数据经过加工。

总结

top命令是对proc文件系统数据的 “加工展示”,而statmstatus是 “原始数据”。差异主要来自共享内存的统计方式、单位转换和数据加工逻辑。在实际使用中,三者的总体趋势(如内存增长 / 减少)是一致的,但具体数值可能略有不同。

http://www.dtcms.com/a/521693.html

相关文章:

  • 基于SpringBoot2+Vue2的论坛发帖交流平台
  • 耒阳在那做网站抖音关键词排名系统
  • 如何用万网做自己的网站网页游戏开发软件
  • 纪念馆网站建设方案旅游网站技术方案
  • 阮一峰《TypeScript 教程》学习笔记——数组
  • KVSTORE_Pain point_tuchuang_ROS2
  • 清控人居建设集团网站wordpress 主题 设计
  • 和17做网店一样的货源网站做网站设计管理的专业
  • 趋势强度识别对ETF止盈触发条件的改进路径
  • 杭州房产网官网企业网站seo模板
  • 中国万网建站平台做移动网站建设
  • 网站内部链接的作用有哪些正规网站建设找哪家好
  • 【11408学习记录】考研数学高频考点精讲:古典概型+几何概型解题框架
  • 济南网站建设有限公司排名好的移动网站建设
  • 网站备份脚本中国最大的库存尾货清货平台
  • 好的外贸网站的特征网络直接销售的营销方式
  • 有做浏览单的网站wordpress和woo
  • 临沂网站建设便宜电商网站建设
  • 多线程六脉神剑第一剑:互斥锁 (Mutex)
  • 做关于星空的网站wordpress自动升级
  • SuperSonic提示词设计与实现深度解析
  • 重庆网站设计哪家好山东省建设厅特种作业证查询网站
  • python 中 TypeError: Object of type TestCase is not JSON serializable
  • 【大模型应用开发 9.LangGraph从入门到实战·下】
  • 网站建设制作一个网站的费用免费免备案域名
  • 网站链接优化网上商城 网站
  • 网站建好了怎么做淘宝客腾讯域名备案
  • 导购网站开发 源码wordpress中常用插件安装包
  • 5 Concepts and Conventions(概念和约定)
  • 韶关住房和城乡建设局网站软件wap网站