經過大量的 I/O 負載,並在 Zram 中儲存了許多東西後,已用空間接近 free
中的全部空間
我不認為這是 Linux 的磁碟記憶體。在
htop
中,記憶體條是綠色的(記憶體不是橙色的),我刪除了儲存在 zram 中的文件。似乎沒有程序使用大量記憶體。負載正在編譯軟體,其建構文件儲存在 zram(
PORTAGE_TMPDIR
在/var/tmp/portage
Gentoo 中)中,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 將收到有關未使用頁面的通知並相應地調整大小。