2010-09-24 40 views
38

我有一臺Linux機器,其內存快照,當我做的/ proc/meminfo中是:想知道足夠的內存是否是免費的Linux計算機上部署新的應用程序

MemTotal:  16413388 kB 
**MemFree:   48296 kB** 
Buffers:  193600 kB 
Cached:  1986448 kB 
SwapCached:  874512 kB 
Active:  15034264 kB 
Inactive:  713672 kB 
HighTotal:   0 kB 
HighFree:   0 kB 
LowTotal:  16413388 kB 
LowFree:   48296 kB 
SwapTotal:  8385920 kB 
SwapFree:  4682408 kB 
Dirty:   3124 kB 
Writeback:   0 kB 
Mapped:  13005560 kB 
Slab:   257784 kB 
CommitLimit: 16592612 kB 
Committed_AS: 59624324 kB 
PageTables:  233748 kB 
VmallocTotal: 536870911 kB 
VmallocUsed: 267064 kB 
VmallocChunk: 536603555 kB 
HugePages_Total:  0 
HugePages_Free:  0 
Hugepagesize:  2048 kB 

這是一個16 GB機器和我有一個Java應用程序部署在這將有3 jvm實例和組合典型的內存要求將接近1 GB。

我想知道會是安全的,不會影響目前這臺機器上運行的其他應用程序部署該應用程序。通過查看上面的內存快照,我們可以發現?

什麼其他的統計數據將幫助我決定,以及如何收集這些統計數據?

+1

你知道'free'命令嗎? – 2010-09-24 07:50:11

+0

free command的統計信息與/ proc/meminfo提供的統計信息相同 – Manish 2010-09-24 08:19:21

回答

123

(這可能是一個有點晚了OP,但是這要求相當頻繁,所以我給它一個鏡頭)

free通常顯示是這樣的:

   total  used  free  shared buffers  cached 
Mem:  8195284 8137708  57576   0 1232328 2651156 
-/+ buffers/cache: 4254224 3941060 
Swap:  18892216  759852 18132364 

人們往往在試圖找出它們有多少可用內存時查看Mem:行。不幸的是這條線是非常容易引起誤解,因爲Linux內核試圖使(至少)的可用內存的最佳使用這些方法來

  • 它將從I/O子系統的緩存數據(例如磁盤) ,這樣如果需要的話,它將很容易獲得。

  • 將積極驅逐已經停用一段時間交換空間,有利於對活動進程的緩存數據的過程。這往往傾向於吞吐量而不是響應速度,所以有些人調整他們的內核來改變這種行爲。

第一點是關於free混亂的根源,這是因爲Mem:線包括用於在所使用的存儲器量的高速緩存存儲器中。儘管如此,內核會因性能原因儘可能緩存。事實上,在任何已經運行了一段時間的Linux系統中,可用內存趨於接近於零 - 未使用的內存會浪費內存。

的高速緩存,不過,可以由內核在需要時由另一個進程中解脫出來。雖然它會在一定程度上影響I/O性能,但其他進程可以在不使用交換空間的情況下擁有更多的內存。因此,對於大多數意圖和目的,表示內存是免費的

這就是爲什麼free包括第二線,其中高速緩衝存儲器被認爲是自由的:

-/+ buffers/cache: 4254224 3941060 

這第二條線是什麼人應該尋找,當他們想知道他們是否有足夠的可用內存某種目的。

在上面的例子中,根據Mem:行,有〜57 MB的可用內存。但是,如果有人讀取第二行,實際上大約有3.9 GB,可以使用它們而不強制活動進程交換。作爲旁註,還有大約760 MB的已被換出的很少使用的數據,爲進程和緩存在主內存中佔用更多空間。

在大致相同的時間,/proc/meminfo內容:

MemTotal:  8195284 kB 
MemFree:   57660 kB 
Buffers:   1232352 kB 
Cached:   2651156 kB 
SwapCached:  119936 kB 
. 
. 
. 

MemTotal:由內核檢測到的可用的物理存儲器。

MemFree:未使用的物理存儲器 - 在Mem:線的free所示的自由存儲器。

Buffers:原始磁盤塊的相對臨時存儲。

Cached:用於從磁盤讀取文件的內存緩存。它不包括SwapCached內存。

SwapCached:內存曾經換出,然後交換回來,但仍在交換空間。如果需要,它的內容可以被丟棄(非常快!),而不必將它們交換出來(較慢)。

所以,有一個實際可用

​​

是一個很好的起點內存的半準確的估計 - 並且在第二行中的一個free節目。

當然,內存管理和相關的統計和測量比這更復雜。 free顯示的數字僅僅是估計值,因爲如果您想深入其中,還有很多其他變量需要考慮。對於經常執行內存使用優化的人來說,這幾乎是一種藝術形式。

編輯:

關於這個 「問題」 有點幽默鏈接:

http://www.linuxatemyram.com/

編輯2:

要確認有關內存使用的分析幾乎是一種藝術形式的評論:

即使free錯過了現代Linux系統上的一大塊緩存數據。從/proc/meminfo我的系統上:

SReclaimable: 2253576 kB 

這是對2GB內存所使用的系統slab分配緩存目錄條目和這樣的,它是可回收的(即它可以被清除,必要時使用的過程)。然而free並不認爲它是緩存內存,並沒有在它的任何計算中輸入它,因此它顯示爲已用內存。

slabtop實用程序(如果可用)允許系統管理員找出slab緩存的用途。

一種方法(用於僅根用戶)具有free顯示實際存儲器系統使用的是以下內容:

# swapoff -a 
# sync 
# echo 3 > /proc/sys/vm/drop_caches 
# free 
      total  used  free  shared buffers  cached 
Mem:  8195284 3181468 5013816   0  8656  228832 
-/+ buffers/cache: 2943980 5251304 
Swap:   0   0   0 
# swapon -a 

第一命令禁用交換空間。如果可用內存可能不足以容納已換出的數據,則不應發出該命令 - 在這種情況下,必須在其內存使用量計算中考慮免費的Swap:行。

第二個命令將所有緩衝的數據推送到磁盤。它允許在下一步釋放更多的高速緩存。

第三個命令是集合中最重要的 - 它強制內核丟棄儘可能多的緩存數據(頁面緩存,目錄條目,inode等)。

然後free最後顯示正在運行的進程在-/+ buffers/cache:行中實際使用的內容。很明顯,即使在刪除所有緩存數據後,內核也會再次開始緩存 - 在這種情況下,它幾秒鐘內已經達到了將近250MB的緩存數據。

最終命令再次啓用交換空間 - 只有在使用第一個命令時也是如此。

應該注意的是,這些命令應該由root用戶執行以獲得必要的權限。

+2

+1很好回答 – willjcroz 2010-12-11 14:29:06

+0

優秀的答案,謝謝! – greg 2014-04-16 03:05:22

相關問題