看記憶體壓力,別看已用記憶體
打開 活動監視器,點選「記憶體」,大多數人第一眼看的數字是 已使用記憶體。這個數字幾乎總是偏高。在 48 GB 的 Mac 上,開著瀏覽器和編輯器,它就會穩穩停在 40 GB,看起來像是要解決的問題。
通常不是。macOS 會把你花錢買的 RAM 用起來,因為閒置的記憶體什麼忙都幫不上:系統會用檔案快取把它填滿,並把最近用過的頁面留在記憶體裡。Mac 是不是真的缺記憶體,要看同一個視窗底部的 記憶體壓力 圖表,通常它還是綠色,「已使用記憶體」卻已經看起來很嚇人。
簡短結論: 別管「已使用記憶體」,去看記憶體壓力圖。只要是綠色,RAM 計量幾乎全滿也不是問題,沒什麼好修。若是黃色或紅色,下面三個計數器會告訴你原因。
為什麼「已使用記憶體」看了沒用
macOS 把空閒 RAM 當成浪費。剛讀過的檔案所在的頁面會繼續留著,因為從 RAM 再讀一次不花錢,從磁碟再讀一次才要。等 App 需要這塊記憶體,快取立刻就會被丟掉。
你可以在 活動監視器 的「記憶體」分頁看到這層拆分:
| 列 | 這是什麼 | 該不該擔心 |
|---|---|---|
| App 記憶體 | App 已配置並正在使用的頁面 | 只有單一 App 明顯失控時才要 |
| 固定記憶體 | 核心無法換出的頁面 | 幾乎動不了 |
| 已壓縮 | 為了騰出空間而壓縮、仍在 RAM 裡的頁面 | 一點點很正常,很多才是訊號 |
| 已快取的檔案 | 因為 RAM 有空而留下的檔案資料 | 永遠不用;這是系統在正常運作 |
「已使用記憶體」把其中好幾項加在一起,包括一有人要就會立刻還回去的已快取檔案。所以健康的 Mac 上,這個數字會爬到接近上限,然後一直停在那裡。
改看壓力
記憶體壓力圖是 macOS 自己對「能不能在不傷效能的前提下滿足配置」的摘要:
- 綠色。 請求都從空閒或可回收記憶體滿足。不管「已使用記憶體」多高,都不用做任何事。
- 黃色。 系統正在壓縮、清出頁面以求跟上。還在運作,但餘裕沒了,再來一次大配置就會有代價。
- 紅色。 配置在等記憶體先被釋出。彩色轉圈、App 切換變慢,就是從這裡來的。
也可以從命令列讀:
memory_pressure
值得看的是最後一行:
System-wide memory free percentage: 74%
同一條指令也會印出推導這個百分比的原始計數,包含頁面數量和交換空間活動,想要證據而不是顏色時很有用。
顏色背後的三個訊號
壓力是黃或紅時,三個數字會解釋原因。要一起看,因為單看任何一個都可能誤導。
已使用的交換空間。 這是因為放不下而被寫到磁碟的記憶體。
sysctl vm.swapusage
vm.swapusage: total = 6144.00M used = 4568.19M free = 1575.81M (encrypted)
交換空間不是零,本身不算故障。就算記憶體還很寬裕,macOS 也會把很久沒碰過的頁面換出去,在 SSD 上代價很小。真正的訊號是交換空間又大、而且 你工作時還在持續長大。
壓縮活動。 寫到磁碟之前,macOS 會先在 RAM 裡壓縮頁面。
vm_stat | grep -i compress
Pages stored in compressor: 1945157.
Pages occupied by compressor: 389440.
Decompressions: 82848340.
Compressions: 163587315.
使用 Mac 時 Compressions 爬得很快,代表系統在搶空間。開機好幾週的機器上,歷史總量很大本身沒有意義。
負載下的 page-in。 你感覺到的停頓,就是把頁面從磁碟讀回來。一台 Mac 同時在壓縮、交換、又 page-in,就是典型的彩色轉圈狀態。
找出是哪個 App
把 活動監視器 的「記憶體」分頁依「記憶體」欄排序,看最上面幾列就好,不用整份清單。答案通常是下面四種之一:
- 開了很多分頁的瀏覽器。 每個轉譯器都是獨立行程,所以瀏覽器的總量會拆到很多列。Chrome 自己的工作管理員在「視窗」選單底下,可以把記憶體對到個別分頁和擴充功能。見 Chrome Helper 佔用大量 CPU 與記憶體。
- 虛擬機器或容器執行環境。 這類東西會先預留記憶體,所以數字是設定選擇,不是外洩。
- 長時間開著的創作或開發 App。 記憶體在一次使用過程中穩定往上長、再也回不來,值得回報給開發者。
- 不認識的行程。 殺掉之前先確認它是什麼,見 如何調查不熟悉的行程。
結束這個 App。系統還應付得來時,只因為某個行程佔得多就強制結束,會丟掉未儲存的工作,什麼也賺不到。
沒用的做法
- 記憶體清理 App。 釋放記憶體等於丟掉系統刻意建好的快取。RAM 計量看起來比較好看,所有東西再讀回來的那段時間,Mac 反而更慢。
- 定期跑
sudo purge。 它會清掉檔案快取,本來是給基準測試用的,同一個錯誤換成指令形式。名字雖然像,但跟磁碟上的可清除空間毫無關係,見 可清除空間。 - 關掉馬上又要重開的 App。 哪些閒置 App 該壓縮,macOS 比任何例行手續都判斷得好。
- 關閉交換空間。 交換空間是安全閥。拿掉它,被殺掉的會是 App。
什麼時候答案真的是加 RAM
Apple Silicon 用的是買了就不能升級的統一記憶體,所以值得先診斷,不要猜。
日常工作時壓力一直停在黃或紅、交換空間在一次使用中穩定長大、而且佔用最多的都是你必須同時開著的東西,這時才該買更多記憶體。如果壓力是綠的,你只是對「已使用記憶體」有反應,加 RAM 不會改變任何你感覺得到的事。
監控工具放哪裡
Mole 把記憶體壓力和 CPU、溫度、以及造成這些數字的行程放在一起,Mac 為什麼慢可以在一個地方看完,不用拆成四個視窗。它把壓力當主數字,因為這個數字才能預測 Mac 用起來的感覺,而且它從來不會主動幫你釋放記憶體。
常見問題
Mac 上記憶體用量高是壞事嗎?
不是。用量高但壓力是綠色,代表 macOS 在用可用 RAM 做快取,這是預期行為。健康指標是壓力,不是用量。
交換空間用多少才算太多?
沒有適用所有機器的門檻。看你實際工作時的趨勢,不要看絕對數字:壓力是黃或紅、交換空間還在穩定長大,這才是問題;開著好幾週的機器上有幾個 GB,通常不是。
記憶體清理 App 有用嗎?
它們做的就是廣告上寫的,這才是問題。丟掉快取會讓可用記憶體數字上升,接下來幾分鐘卻更慢。有東西需要時,macOS 自己就會回收記憶體。
壓力是綠色,Mac 為什麼還是慢?
那就不是記憶體在卡。去看 CPU、溫度降頻或磁碟。從 為什麼你的 Mac 這麼慢 開始,它會依序把瓶頸過一遍。