如何查看 Mac 内存占用
2026年10月13日更新
要查看 Mac 上是谁在占用内存,打开活动监视器,选择“内存”标签页,按“内存”列排序;底部的“内存压力”图表会告诉你这些占用是否真的有问题。在终端中,top -l 1 -o mem -n 10 会列出占用最大的进程,memory_pressure 会输出全系统的可用内存百分比。
本指南的其余部分会教你看懂这些数字,因为 Mac 上的“已使用内存”经常有充分的理由偏高。如果你更喜欢在菜单栏里看,WTMemory 会显示内存占用、macOS 内存压力事件以及背后的应用,不过下面的每一步用系统自带工具都能完成。
怎么在活动监视器中查看内存占用?
- 从 应用程序 > 实用工具 打开 活动监视器,或按 Command-空格键 输入它的名字。
- 选择 内存 标签页。
- 点击 内存 列标题,让占用最大的进程排在最上面。
- 查看窗口底部的面板。
底部面板显示以下数据:
| 数据 | 含义 |
|---|---|
| 物理内存(Physical Memory) | Mac 中安装的内存。 |
| 已使用内存(Memory Used) | App 内存 + 联动内存 + 已压缩。 |
| App 内存(App Memory) | 应用及其进程分配的内存。 |
| 联动内存(Wired Memory) | 系统必须保留在内存中、不能压缩也不能交换的内存。 |
| 已压缩(Compressed) | macOS 为腾出空间而压缩的非活跃内存,而不是把它写到磁盘上。 |
| 已缓存文件(Cached Files) | 保留在内存中的最近使用过的文件数据。应用需要时 macOS 会把它让出来。 |
| 已使用的交换(Swap Used) | 因内存不足而写到启动磁盘上的内存。 |
一行进程不一定就是整个应用。浏览器和 Electron 应用会把工作拆分到很多辅助进程中,所以开了 40 个标签页的浏览器可能会显示成几十行。把它们加起来,或者用 显示 > 所有进程(分层) 把它们归组。
已使用内存和内存压力有什么区别?
已使用内存是此刻分配出去的内存量。内存压力描述的是 macOS 需要多费力才能继续分配内存。图表用颜色区分:绿色表示内存使用高效,黄色表示 macOS 在依赖压缩,红色表示内存不足、正在大量使用交换。
一台 8 GB 内存的 Mac 可能整天显示已使用 7.5 GB,压力却一直是绿色。这很正常。macOS 认为闲置的内存就是浪费的内存,会用缓存文件把它填满,一旦应用需要空间就立即丢弃。要盯的是压力,而不是已使用的数字。
交换和压缩内存说明了什么?
内存满了以后,macOS 会先压缩非活跃页面,这很快。如果还不够,它会把页面写入启动磁盘上的交换文件,这比内存慢得多。有一些交换是正常的,尤其是长时间使用之后。需要警惕的信号是:
- 工作时“已使用的交换”持续增长,而不是停在某个固定值。
- 压力图表长时间处于黄色或红色。
- 在应用之间切换时出现卡顿。
在终端中查看交换:
sysctl vm.swapusage
怎么在终端里查看内存占用?
这些命令只读取信息,不会关闭任何应用,也不会改动任何设置。
内存占用大户。按内存排序拍一张快照,显示前 10 个进程:
top -l 1 -o mem -n 10 -stats pid,command,mem
系统压力。不带参数运行 memory_pressure。它会输出页面统计数据,最后一行类似 “System-wide memory free percentage: 37%”。不要加 -l、-p 或 -S:根据 man memory_pressure,这些选项会刻意施加或模拟内存压力。
memory_pressure
原始页面计数。vm_stat 输出的是页面数。乘以第一行显示的页面大小(Apple 芯片上为 16384 字节,Intel 上为 4096)即可换算成字节。重点看 “Pages stored in compressor”、“Swapins” 和 “Swapouts”;运行 vm_stat 5 每 5 秒输出一行,看看此刻是否正在发生交换。
vm_stat
已安装的内存。sysctl hw.memsize 以字节为单位输出总内存,例如 8 GB 显示为 8589934592。
通常是什么把内存吃光了?
在开发者和重度使用 AI 的 Mac 上,翻来覆去就是这几样:
- 浏览器。每个标签页、扩展和 service worker 都可能是一个独立进程。关掉不用的标签页,或者看看浏览器自带的任务管理器。
- Electron 应用。Slack、Discord、VS Code、Cursor 等应用各自运行一份浏览器引擎,并带有若干辅助进程。
- Docker Desktop。容器运行在一个 Linux 虚拟机里,这个虚拟机会按 Docker Desktop 设置中 Resources 下的上限预留内存。如果很少用到那么多,就把上限调低,或者不用容器时退出 Docker。存储方面请参阅 Docker 磁盘空间指南。
- 本地大模型。加载后的模型在内存中大约占用与其权重相当的空间。使用 Ollama 时,
ollama ps会显示已加载的模型,ollama stop <model>可以卸载模型。LM Studio 对已加载的模型提供弹出(eject)按钮。 - 开发服务器和文件监听。忘在旧终端标签页里的
npm run dev、Vite、Next.js、webpack 或 Python 服务器会一直运行。用lsof -iTCP -sTCP:LISTEN -n -P列出正在监听的进程,结束任何进程之前先看看 端口 3000 指南。 - 虚拟机和模拟器。Parallels、UTM 和 iOS 模拟器在运行时都会预留内存。
“释放内存”真的有用吗?
通常没用,而且值得老实说清楚原因。很大一部分“已使用”的内存是缓存数据,应用一要,macOS 马上就会让出来。强行清掉这些缓存,意味着 macOS 之后得从磁盘再读一遍同样的数据。那些让已用内存数字大幅下降的“内存清理”软件,展示的往往正是这个:一个变小的数字,而不是一台变快的 Mac。
当压力变成黄色或红色时,真正有用的是:
- 如果用不着,退出“内存”列最上面的那个应用或进程。
- 卸载本地模型,停掉不用的容器。
- 关闭闲置的浏览器标签页和窗口。
- 重启某个膨胀到远超正常大小的应用,长时间运行的进程有时会这样。
- 如果日常正常工作时压力就是红色,说明你的工作负载需要比这台 Mac 更多的内存。
有没有更快的方法盯着 Mac 内存?
WTMemory 是一款小巧的原生菜单栏 App,可以显示内存占用、macOS 内存压力事件、CPU、磁盘、电池和网络读数,还有一个 Running Apps(运行中的 App)列表,列出每个应用的内存、CPU、PID 和端口。查看功能免费。升级 Pro(一次性 $9 USD,最多 3 台 Mac,7 天试用)后,你可以在确认后退出应用,保护想保留的应用,并使用 “Keep Current App, Close the Rest”(保留当前应用,关闭其余应用),在你核对列表后请其他应用正常关闭。
它还有一个 “Clear Inactive Memory”(清除非活跃内存)菜单操作,这是一个可选的手动 macOS 内存重置,可能需要管理员授权。之后应用可能会重新加载缓存数据,基于上面的原因,我们不承诺它会让任何东西变快。WTMemory 需要 macOS 12 或更高版本,原生支持 Apple 芯片和 Intel;下载大小约 4.2 MB。
常见问题
Mac 内存占用高是坏事吗?
本身不是。macOS 会有意用缓存文件和压缩数据填满空闲内存。内存压力才是更好的指标:绿色没问题,黄色表示 macOS 压力变大,红色表示内存不足。
已使用内存和内存压力有什么区别?
已使用内存是当前分配出去的内存量。内存压力描述的是 macOS 需要多费力(借助压缩和交换)才能继续给应用分配内存。一台 Mac 完全可能占用很高而压力很低。
明明还有空闲内存,为什么还在用交换?
macOS 可能在这次开机早些时候把很少用到的页面移到交换文件中,然后一直留在那里。交换量小且稳定是正常的。如果工作时交换量持续增长,说明你的工作负载超出了内存容量。
释放内存能让 Mac 变快吗?
通常不能。清掉缓存内存只会让 macOS 之后再从磁盘读一遍这些数据。真正有用的是关闭导致内存压力过高的应用。
运行 memory_pressure 命令安全吗?
不带参数运行时,memory_pressure 只会输出统计数据和全系统可用内存百分比。-l、-p 和 -S 选项会刻意施加或模拟内存压力,除非是在测试,否则不要使用。