Linux

經過大量的 I/O 負載,並在 Zram 中儲存了許多東西後,已用空間接近 free 中的全部空間

  • July 15, 2021

我不認為這是 Linux 的磁碟記憶體。在htop中,記憶體條是綠色的(記憶體不是橙色的),我刪除了儲存在 zram 中的文件。似乎沒有程序使用大量記憶體。

負載正在編譯軟體,其建構文件儲存在 zram(PORTAGE_TMPDIR/var/tmp/portageGentoo 中)中,swapfile 也在 zram 上。它配置了 zram 寫回,以便在沒有多少 RAM 的情況下寫入磁碟。

我編譯了2個軟體,1個軟體之後,好像還有1/2左右的記憶體佔用,zramctl說使用的總數據接近0G,沒有程序佔用太多記憶體,Linux磁碟記憶體不是問題。

在 kswapd 持續保持 100% CPU 使用率的情況下,核心 OOM 殺死了消耗過多 RAM 的程序。在此之後仍然在使用 RAM,但我找不到任何東西正在使用它。如果是磁碟記憶體,核心會將空間交給記憶體消耗程序。但它沒有,所以這很可能不是磁碟記憶體問題,我重新啟動電腦,第二個軟體快速編譯沒有問題!

有誰知道可能是什麼情況,有什麼方法可以進一步確定正在使用記憶體的內容嗎?

**簡短的回答:**在掛載文件系統或打開在 Zram 設備上創建的交換時使用丟棄掛載選項。

**擴展:**當掛載文件系統discard用作掛載選項時,您可以設置掛載選項,其中-o和選項之間用 分隔,中間,沒有空格。大多數 Linux 文件系統都應該支持它,我在 Btrfs 上使用它。在交換時,使用-d時使用swapon. 除此之外,您還可以定期fstrim在文件系統掛載的目錄上執行,但從我在輸出中看到的內容來看,zramctl這不是必需的,discard掛載選項已經足夠好了。

**編輯:**實際上,經過一些進一步的測試,我認為定期fstrim在 Zram 支架上執行是個好主意。使用 Zram 中的建構目錄編譯 Firefox 後,大約有 1.1GB 的 RAM 使用量。幾乎沒有沒有discard安裝選項那麼糟糕,但還有改進的餘地。在 Zram 掛載上執行fstrim(只需要幾秒鐘即可執行)導致 RAM 使用量達到 400MB,這是正常的。我可能會將它放在 cron 作業中或在 portage 編譯之後。

**說明:**當文件被刪除時,Zram 不會刪除記憶體上的壓縮頁面,因為它沒有收到空間不再用於數據的通知。刪除文件時,discard 選項執行丟棄。如果您使用丟棄掛載選項,Zram 將收到有關未使用頁面的通知並相應地調整大小。

引用自:https://unix.stackexchange.com/questions/545078