2010-06-11 38 views
19

的Linux /proc/meminfo顯示了許多的內存使用情況的統計數據。如何可靠地測量Linux中的可用內存?

MemTotal:  4040732 kB 
MemFree:   23160 kB 
Buffers:  163340 kB 
Cached:  3707080 kB 
SwapCached:   0 kB 
Active:  1129324 kB 
Inactive:  2762912 kB 

它們之間有相當多的重疊。例如,據我所知,可以有活動頁面緩存(屬於「緩存」和「活動」)和非活動頁面緩存(「非活動」+「緩存」)。

我想要做的是衡量「免費」的內存,但在某種程度上,它包括用於網頁可能不會對整個系統的性能有顯著的影響被丟棄。起初,我傾向於使用「free」+「inactive」,但Linux的「free」工具在其「緩衝區調整」顯示中使用「free」+「cached」,所以我很好奇什麼是更好的方法是。

當內核運行的內存,什麼是網頁下降的優先級,什麼是更合適的指標來衡量可用內存?

+1

同時檢查'Committed_AS',它是內核實際處理的實際大小_promised_。它看起來像你正在嘗試更多的預測,如果你分配/鎖定/使用xx字節會發生什麼情況,給出當前的內存使用情況? – 2010-06-11 08:08:26

+0

@Tim Post,是的,我甚至沒有開始在圖片中過度使用。我試圖得到一個數字,可以預測何時會發生壞事情,如果使用更多的內存。 – 2010-06-11 08:19:10

回答

2

我會說這是很難衡量哪些頁面,跌落時,會導致系統有一個「對系統整體性能顯著的影響」。用戶進程使用的頁面將是(Total) - (Free + Cached + Paged)。第二項是內核可以根據需要釋放的所有內存。但是,釋放用於緩存和頁面的內存頁面會對整體系統性能產生重大影響。

如果我打算使用啓發式,我會說你應該採取「非活動」的值,即「緩衝區或頁面緩存內存的總量,以千字節爲單位,這是免費和可用的。是最近尚未使用的內存,可以用於其他目的回收。「如果你發現自己採取了這種做法,並且系統能夠繼續正常工作,那麼你可以估計一定比例的「主動」作爲猜測,因爲系統最近可能使用了一些頁面,但不會再使用它們。你比我更瞭解這個系統。如果系統專門用於您要做的任何事情,那麼可能很快就會使用的Active中的頁面和緩存文件將取決於系統最近是否用於其他目的。

8

因爲什麼「可用內存」正是指取決於你的目的,你的目的是爲了避免OOM情況:

退房how Qt Extended (previously Qtopia) anticipates OOM situations.

有兩個事件:

  • (MemFree +緩衝區+緩存)/ MemTotal <閾值(在/proc/meminfo
  • 重大頁面錯誤>閾值(pgmajfault在/proc/vmstat我認爲)

第一個是內存不足的早期預警,並觸發更頻繁的頁面錯誤監控。第二個信號被破壞,這會殺死系統性能,並且是OOM殺手的一個很好的暗示。

+0

+1防止OOM的良好算法 – SeanDowney 2012-01-23 22:14:43

3

起初,我發現你的問題很容易,因爲在實際輸出free列中的「+緩存/緩存」是我使用的一個,它正常工作。

但是在它不工作的情況之一是當你有重讀取相同的塊。例如。讀同一1個gb_file一遍又一遍:

while true; do cat 1gb_file >/dev/null; done 

如果你的系統有> 1級GB的高速緩存,那麼這將跑得快。但是,如果您開始使用某些緩存來進行其他操作,則會粉碎系統的性能。

因此,當您評估您的解決方案時,請嘗試以上方法,看看解決方案是否考慮到了這一點。

2

我使用以下命令:

FREE_KB = MemFree + Buffers + Cached 

FREE_KB=$(($(echo `sed -n '2p;3p;4p' < /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /+/g"))) 


USED_KB = MemTotal - MemFree - Buffers - Cached 

USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /-/g"))) 
+0

在我看來,/ proc/meminfo是否返回字節或kb可能取決於系統。對我來說,上面的代碼似乎返回字節YMMV。 – russellpierce 2015-12-10 13:19:21

+0

你使用哪個內核? 在當前的Linux函數中,meminfo_proc_show只返回kB。 – Const 2015-12-19 20:41:50

2

從Linux-3.14有在/ proc/meminfo中新的度量MemAvailable。

並在免費的實用程序輸出中檢查' -/+ buffers/cache:'行。

相關問題