我想了解我的嵌入式Linux內存使用情況。Linux是如何計算MemFree
通過使用top實用程序和進程文件/ proc/meminfo,我可以看到進程正在使用多少虛擬內存以及系統有多少物理內存可用。但是對於任何給定的進程來說,虛擬內存似乎都比使用的物理內存高得多。由於這是一個嵌入式系統,內存交換被禁用。(SwapTotal = 0)
linux如何計算空閒物理內存?因爲它似乎沒有考慮在虛擬內存空間中分配的所有內容。
我想了解我的嵌入式Linux內存使用情況。Linux是如何計算MemFree
通過使用top實用程序和進程文件/ proc/meminfo,我可以看到進程正在使用多少虛擬內存以及系統有多少物理內存可用。但是對於任何給定的進程來說,虛擬內存似乎都比使用的物理內存高得多。由於這是一個嵌入式系統,內存交換被禁用。(SwapTotal = 0)
linux如何計算空閒物理內存?因爲它似乎沒有考慮在虛擬內存空間中分配的所有內容。
MemFree
in /proc/meminfo
是好友分配器中有多少頁可用的計數。該好友分配器是內核中物理內存分配的基本單位;但是有很多方式可以在需要的時候將頁面返回給好友分配器 - 例如,釋放空的SLAB,丟棄緩存/緩衝區RAM(即使這意味着在運行過程中使PTE失效),或作爲最後的手段,交換事情。
實際上,MemFree
通常被控制爲只佔物理內存總量的5-10%,隨着時間的推移,任何額外的空閒內存都將被加入緩存中。因此,MemFree
單獨是一個非常不完整的內存情況。
對於給定進程的虛擬內存(VSIZE),這是指進程地址空間中所有映射內存段大小的總和。但是,並非所有這些都會實際存在 - 有些可能是paged in upon first access,因此在實際使用之前,它們不會註冊爲正在使用的存儲器。常駐大小(RSIZE)是一個更準確的視圖,因爲它只註冊現在被映射到的頁面 - 雖然如果給定的頁面映射到多個虛擬地址,這也可能不準確(當您考慮多個進程 - 共享庫具有映射到正在使用該庫的所有進程的相同物理RAM)
嘗試使用htop。你將不得不安裝它sudo apt-get install htop
或yum install htop
,無論如何。
它會告訴你一個更準確的內存使用情況。
基本上,它歸結爲「緩衝區/緩存」。
free -m
查看緩衝區/高速緩存行中的空閒列,這是實際可用的更準確的表示。
total used free shared buffers cached
Mem: 3770 3586 183 0 112 1498
-/+ buffers/cache: 1976 1793
Swap: 7624 750 6874
不幸的是,它看起來並不像我的嵌入式系統上的Busybox那樣可以使用htop。 – simon 2009-09-10 21:06:12
我認爲這實際上是回答我困惑的癥結所在「......常駐大小(RSIZE)是一個更準確的觀點,因爲它僅將註冊在現在映射頁......」所以,我的猜測是,如果任何一個進程決定嘗試分配所有的VSIZE,它也會增加物理內存。 – simon 2009-09-16 19:44:51