Linux

為什麼 /proc/meminfo 中的 MemTotal 會發生變化?

  • August 2, 2019

我監視/proc/meminfo文件中的值,即MemTotal:數字。如果 ram 模組損壞,它會發生變化,大致取決於記憶體模組的大小 - 這很明顯。

我從核心文件中知道該欄位的定義:

MemTotal: Total usable ram (i.e. physical ram minus a few reserved
         bits and the kernel binary code)

還列出了dmesg核心數據。MemTotal如果我忽略記憶體模組的硬體故障,還有哪些其他特定操作會使數字發生變化?

這發生在物理和虛擬系統上。我監控數百個物理系統、數千個虛擬系統。儘管這種變化相當罕見,但它確實發生了。

我對核心或模組中的錯誤感到不舒服,所以我進一步探勘並發現……它MemTotal可以定期改變,向下或向上。它不是一個常數,而且這個值肯定會在很多地方被核心程式碼修改,在各種情況下。

例如 virtio_balloon kmod 可以減少 MemTotal也可以再次增加。然後當然,mm/memory_hotplug.c正在 exporting [add|remove]_memory,這兩者也被很多驅動程序使用。

那不應該改變。這可能是 RAM 中某些錯誤位置的指示。您可以使用Memtest86+診斷您的 RAM 。

除此之外,如果您正在分析虛擬機來賓,該數字可能會發生變化的唯一其他方式。可能執行 VM 來賓的主機正在調整分配給來賓的 RAM。

編輯#1

我確實探勘了這個論壇文章,其中討論了核心模組可能導致記憶體洩漏的潛在記憶體洩漏,這可能導致 MemTotal 發生變化。

摘自:Re:如何確定係統記憶體的大小?

2008 年 7 月 30 日,Bill McGonigle 寫道:

> > 2008 年 7 月 30 日,10:03,Thomas Charron 寫道: > > > > > > > MemTotal 可以改變。MemTotal 不顯示核心二進製文件本身在記憶體中使用的記憶體,但是在某些情況下,模組可能會洩漏記憶體,這也會從 MemTotal 中刪除。我不記得發生的具體情況,但我知道保羅現在在說什麼。好吧,如果您將 MemTotal 定義為機器中存在的物理記憶體,那隻是一個錯誤。如果您將其視為核心可用的總記憶體,那麼它執行正常,對嗎? > > > > > > > > >

是的,“錯誤”是當這個數字下降時,這意味著有東西洩漏,也就是“壞核心”。至少可能是“壞的”(讀取可能有錯誤的)核心模組。

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