我的記憶在用什麼?

我的記憶在用什麼?

我試圖找出是什麼耗盡了我的 linux (ubuntu 20.04) 伺服器上的記憶體。

重新啟動後不久,htop 顯示以下內容:

頂部

這表示目前正在使用 17 GB 記憶體。在我重新啟動之前,它顯示為 29.6 GB,並且計算機似乎運行緩慢。 htop 視窗按記憶體排序,使用率最高的進程使用了 0.6% 的記憶體。

另一個問題建議使用這個指令:

ps -e -orss=,args= | sort -b -k1,1n

使用率最高的進程報告了 209596 KB(?)內存,因此又只佔可用 RAM 的一小部分。

我嘗試了一個相當神秘的命令來將該命令報告的第一列中的所有數字相加ps

ps -e -orss=,args= | sort -b -k1,1n | sed 's/^ \+//' | cut -d \  -f 1 | sed '2,$s/$/+/' | sed '$s/$/p/' | dc

報告的總使用量為 2965816 KB(?),(假設我的千位元組假設是正確的)小於 3 GB,那麼另外 14 GB 去哪了?

有人可以幫忙嗎?

答案1

是的 - 這會給我帶來問題嗎?

這不會造成問題。這是預期的行為。 ZFS 最初不是為 Linux 設計的。它有自己的快取系統(稱為ARC,自適應替換快取)。在 Linux 上,分配給該快取的記憶體被視為“正在使用”,儘管當記憶體壓力上升時它將被釋放,就像常規檔案系統快取一樣。預設最大 ARC 大小是實體記憶體的 50%。

在現代版本htop(3+) 中,您可以開啟 ARC 狀態顯示:

htop 3 zfs 狀態

此螢幕截圖來自具有 8 GiB 記憶體的系統。

答案2

ZFS 具有基於 RAM 的磁碟緩存,該緩存與常規 Linux 磁碟快取分開。這與 ZFS 的非 Linux 起源有關。此 ZFS 記憶體快取稱為自適應替換快取或 ARC。由於這種分離,ZFS ARC 在 Linux 中顯示為「已使用」內存,而不是您對本機檔案系統(例如 EXT4)所期望的「快取」記憶體。這就是許多剛接觸 ZFS 的人擔心 RAM 使用情況的原因,但其實沒有什麼好擔心的。除非您正在處理重複資料刪除(您可能不會,也不應該這樣做),否則記憶體對於 ZFS 來說並不是那麼大的問題,這與許多人告訴您的相反。

您會看到磁碟快取(以及記憶體)被填滿,因為您正在移動(這意味著讀取)大量資料。 ARC 的預設記憶體限制通常是 RAM 的 50%,但如果您希望設定最大值,則可以透過 zfs 核心模組參數「zfs_arc_max」進行配置。如果可用記憶體變得稀缺,ZFS 將釋放其部分 ARC,就像 Linux 的常規磁碟快取一樣。再次強調,沒有什麼好擔心的;未使用的 RAM 是浪費的 RAM。

--亨克·阿赫特帕德

相關內容