為什麼 /proc/meminfo 中的 MemTotal 會發生變化?
我監視
/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 發生變化。
2008 年 7 月 30 日,Bill McGonigle 寫道:
> > 2008 年 7 月 30 日,10:03,Thomas Charron 寫道: > > > > > > > MemTotal 可以改變。MemTotal 不顯示核心二進製文件本身在記憶體中使用的記憶體,但是在某些情況下,模組可能會洩漏記憶體,這也會從 MemTotal 中刪除。我不記得發生的具體情況,但我知道保羅現在在說什麼。好吧,如果您將 MemTotal 定義為機器中存在的物理記憶體,那隻是一個錯誤。如果您將其視為核心可用的總記憶體,那麼它執行正常,對嗎? > > > > > > > > >
是的,“錯誤”是當這個數字下降時,這意味著有東西洩漏,也就是“壞核心”。至少可能是“壞的”(讀取可能有錯誤的)核心模組。