在终端中无法直接获取“内存真实占比”,但可通过ps查RSS、vmmap -summary看physical footprint、sysctl vm.memory_pressure获压力值(0–100)、vm_stat查交换与压缩量等组合方式,综合评估macOS动态内存占用。
终端里没有直接显示“内存真实占比”的单一命令,但可以通过组合系统工具获取接近真实内存占用的指标——关键在于区分 虚拟内存(vm) 和 实际物理内存消耗(rss + 压缩 + 共享页影响)。macos 的内存管理高度依赖压缩、文件缓存和联动内存,所以单纯看 rss(resident set size)会低估或高估实际压力。
查看各进程 RSS 内存(最常用、较直观)
RSS 表示进程当前实际驻留在物理内存中的字节数(不含交换、不含压缩内存),是终端中最易获取且较贴近“正在用多少 RAM”的指标:
- 运行:ps aux --sort=-%mem | head -20 —— 按内存使用率降序列出前20个进程,
%MEM列是 RSS 占物理内存的百分比(基于ps计算逻辑,分母为hw.memsize) - 更精确的 RSS 字节数:ps -eo pid,ppid,%mem,rss,comm --sort=-rss | head -15 —— 显示 PID、父进程、内存占比、RSS(KB)、命令名,按实际内存大小排序
结合 vmmap 查看单个进程的详细内存构成
vmmap 是 macOS 专属工具,能揭示某个进程的虚拟地址空间分布,包括已压缩内存、写时复制页、共享库占用等,比 RSS 更反映“真实内存足迹”:
- 先查目标进程 PID:pgrep -f "Safari"(例如查 Safari)
- 再运行:vmmap -summary
—— 输出中重点关注:
• Physical footprint: 当前实际占用的物理内存(含压缩后内存),单位 KB,这是最接近“真实内存占比”的数字
• Compressed: 该进程被压缩的内存量
• Dirty: 不可被缓存或丢弃的私有内存
识别高内存压力的间接信号
仅看单个进程 RSS 或 footprint 不足以判断系统是否“真缺内存”,需结合全局指标:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 查看内存压力等级(图形化对应值):sysctl vm.memory_pressure —— 返回 0(无压力)到 100(严重压力),>65 通常表示系统开始频繁压缩/换出
- 检查交换使用量:vm_stat | grep "Pages active\|Pages inactive\|Pages occupied\|Swap" | head -4 —— 若
Pages swapped out持续增长,说明物理内存不足,已启用磁盘交换 - 观察压缩总量:sysctl vm.swapusage 或 top -l 1 | grep "PhysMem" —— 输出中
compressed后的数值即当前压缩内存总量
为什么没有“绝对真实占比”?
macOS 的内存设计决定了无法给出一个唯一、静态的“真实占比”:
- 多个进程可能共享同一段框架库内存(如 AppKit),这部分只计入物理内存一次,但会被多个进程的 RSS 重复统计
- 压缩内存是动态的:同一进程在空闲时被压缩,活跃时解压,其 footprint 波动大
- 文件缓存(
cached files)占用大量内存,但系统可在需要时瞬间释放,不构成真正压力 - 联动内存(
wired memory)必须常驻,不可压缩或换出,对可用内存影响最大,但ps默认不单独暴露该字段










