Linux
如何在 *nix 系統上獲取每個程序使用的記憶體
我想知道,每個程序的記憶體使用量是多少。有沒有辦法做到這一點?我目前在 Ubuntu 上。
問題是,我的 PC 填滿了整個記憶體,然後當我需要 RAM 時才開始交換而不是釋放記憶體。不是理想的情況。知道什麼過程“需要”所有這一切都會有幫助。我懷疑 ESET AV 因為它的“好”是 -20 in
htop
. (是的,我需要 AV,不,這不是我的決定)如您所見,有 16GB 的記憶體(根據 ,其中一小部分是 buff
htop
)。這是在大約 45 分鐘之後uptime
。沒有任何交換,但有時它只是交換 5-7GB 的數據(當我啟動 VM 或類似的東西時)。使用者名@主機名:[~]$ 免費 -h 可用的免費共享緩衝區/記憶體總數 記憶體:23Gi 6,4Gi 354Mi 4,6Gi 16Gi 11Gi 交換:23Gi 3,0Mi 23Gi
無論如何,即使沒有這個問題,確切地知道誰在記憶體,以及有多少是一個很好的資訊。
記憶體的使用不是按程序跟踪的——頁面存在於記憶體中,並且可以被系統上的任何程序使用。
掃描大量文件的程序(例如防病毒掃描程序或備份工具)通常會產生您所看到的症狀:如果交換可用,不斷讀取大量文件會驅逐其他頁面進行交換。您可以考慮以下幾點來提高系統的性能:
- 使用諸如
nocache
減少防病毒掃描程序對記憶體的影響之類的工具(請參閱如何關閉單個程序的塊記憶體?)- 減少系統中配置的交換量,您可能需要的空間遠少於 23GiB(請參閱為什麼 Linux 需要 VM 中的交換空間?)
如果你想保留一個大的交換分區(例如用於休眠;目標是已安裝記憶體的 2/5,雖然這不是硬限制),你可以減少
vm.swappiness
以便核心會認為交換比逐出頁面記憶體頁面,因此傾向於減少其記憶體使用而不是增加其交換使用。