「記憶體」欄位
又稱:記憶體用量
簡短回答
活動監視器中的「記憶體」欄位會顯示每個程序使用多少記憶體。這個數值反映的是程序的記憶體用量,所以可能包含已壓縮的記憶體,而不只是以未壓縮形式留在記憶體中的資料。
依「記憶體」欄位排序,是查看哪些程序使用最多記憶體的最快方法。它是以程序計算的數值:有輔助程序的App會分散在好幾列。
把每一列加起來,並不會等於視窗底部的「已使用的記憶體」。程序之間可以共用記憶體,而且總量的計算方式也不同。
為什麼App的記憶體看起來比預期低
許多App會執行輔助程序,而每個輔助程序各占一列。瀏覽器的主要列數值可能不高,但它的輔助程序加起來卻多得多。使用「顯示方式」→「所有程序(依階層排列)」可以看到部分輔助程序列在其父程序底下,或自己把各列加起來。
如何使用「記憶體」欄位
記憶體壓力變黃或變紅時,依此欄位排序。留意是否有程序在你沒有多做什麼的情況下持續變大,這可能代表有記憶體洩漏。結束並重新打開App,就能釋放它的記憶體。
你可以從「顯示方式」→「欄位」加入其他記憶體欄位,例如已壓縮的記憶體,查看每個程序的更多細節。
「記憶體」欄衡量的是什麼
macOS會持續為每個程序計算一個稱為實體占用量(physical footprint)的數值。它追蹤的是程序寫入過且擁有的記憶體。活動監視器中的「記憶體」欄和top指令中的MEM欄顯示的都是這個數值。
因為它計算的是程序擁有的記憶體,而不只是此刻在RAM中的記憶體,所以可能包括壓縮資料,以及系統代替該程序用於圖形的記憶體。它不包括程序只讀取過的檔案,這些檔案系統可以丟棄,之後再重新讀取。
驅動程式或系統元件代替某個程序預留的部分記憶體,會刻意排除在它的占用量之外,因為程序無法控制這部分的大小。所以「記憶體」欄很適合用來比較程序,但並不能精確記錄某個程序讓系統用掉的每一個位元組。
如何在「終端機」中查看程序的記憶體
這些指令只會讀取資訊。當活動監視器沒有打開,或你想長時間記錄某個數字時,它們很實用。
- 執行
top -o mem,列出依記憶體排序的程序。MEM欄與活動監視器的「記憶體」欄一致。按q即可結束。 - 執行
top -l 1 -o mem -n 10 -stats pid,command,mem,輸出一次最大的十個程序,然後結束。 - 執行
footprint並在後面加上App名稱,例如footprint Safari,即可查看它依類別區分的記憶體。結尾的phys_footprint行與「記憶體」欄一致,phys_footprint_peak則是該程序啟動以來的最高值。 - 請注意,
ps顯示的是RSS,也就是和「實體記憶體」欄一樣的常駐大小,所以它的數字和「記憶體」欄對不起來。
如何用「記憶體」欄發現記憶體洩漏
- 如果你想讓更新更快,請在「記憶體」標籤頁中選擇「顯示方式」>「更新頻率」>「頻率高(1秒)」。
- 找到這個App及其輔助程序,記下它的「記憶體」數值。
- 照平常的方式繼續使用這個App,不要打開更多文件或視窗。
- 過一段時間再查看這個數值。如果它不斷攀升、從不回落,即使關掉你打開的東西也一樣,這個App很可能有記憶體洩漏。
- 結束並重新打開這個App來釋放記憶體。如果問題再次發生,請檢查這個App是否有更新。
大家常問的問題
活動監視器中的「記憶體」欄位代表什麼?
它是每個程序使用的記憶體量,依據的是程序的記憶體用量。依此欄位排序,就能找出用量最大的項目。
為什麼「記憶體」欄位的數值加起來不等於「已使用的記憶體」?
程序之間會共用部分記憶體,而系統總量的計算方式也不同,所以各列的總和與總量不會完全一致。
為什麼一個App會顯示很多列?
這個App執行了輔助程序,而活動監視器會把每個程序分開列出。
「記憶體」欄和「實體記憶體」是一樣的嗎?
不是。「記憶體」是程序的占用量,可能包括壓縮資料。「實體記憶體」只是此刻在RAM中的部分,其中包括一些與其他程序共用的記憶體。
「記憶體」欄包括GPU記憶體嗎?
它可能包括系統算在該程序上的圖形記憶體,因為占用量涵蓋多種記憶體,而不只是一般的App資料。
為什麼「記憶體」欄和ps或其他工具對不起來?
ps這類工具回報的是常駐大小,計算記憶體的方式不同。top指令的MEM欄和footprint指令,使用的是和活動監視器相同的占用量計算。
相關詞條
逐步教學:哪個App在使用我的CPU或記憶體。
想找比活動監視器更好的工具?請參閱Mac上最好用的活動監視器替代方案,或瀏覽詞彙表中的所有詞條。