2012-07-04 67 views
3

我正在寫一個perl腳本,我真的很想獲得當前在我的linux機器上使用的緩存內存量。當你運行「free -m」,你會得到這樣的輸出:perl獲取linux緩存內存號

   total  used  free  shared buffers  cached 
Mem:   496  322  173   0   33  106 
-/+ buffers/cache:  183  312 
Swap:   1023   25  998 

數下「緩存」是我想要的價值。我一直在使用Linux::SysInfo,這可以幫助我獲得關於我的盒子的大量有用信息,但似乎缺乏緩存內存。有沒有人知道另一個模塊或Perl的優雅方式來獲得我的機器上的緩存內存量?我知道,我可以運行此得到它:

my $val = `free -m`; 

,然後val運行正則表達式,但我更喜歡另一種解決方案(如果存在)。謝謝!

回答

2

我不確定您是否只有想要一個Perl解決方案,或者是否有任何命令行解決方案可以接受。爲以防萬一,這裏是一個簡單AWK的解決方案:

free -m | awk '/^Mem:/{print $NF}' 

,將打印你所感興趣的數量

你可以把它分配給了一些shell變量,如果這是必要的:

$ c_val=`free -m | awk '/^Mem:/{print $NF}'` 
$ echo $c_val 

將顯示要驗證的值。

說明的

awk命令

/^Mem:/搜索包含在開始串Mem:線。如果發現它打印最後項目,這是我們感興趣的數字。在awk中,行被分割爲基於空格的字段。 $0爲整行,$1第一個字段,第二個字段爲$2等。每行的字段數量由預定義的awk NF變量給出,因此我們可以通過$NF訪問行中的最後一個字段。

我們也可以使用此awk命令:

awk 'NR==2{print $NF}' 

它利用包含當前行號的預定義的awk NR變量。在這種情況下,我們在第二行打印最後一個項目(字段)。

+0

你能解釋一下這對我有用嗎?我得到免費-m被傳入awk命令,但這是awk的一部分,我沒有得到。 – srchulo

+0

@srchulo我添加了一個解釋,它讓我想到了另一種使用awk的方法。你可以選擇一個更適合你的人。 – Levon

+0

太棒了!非常感謝:) – srchulo

6

運行strace free -m表明,它正在使用/proc/mem

開放( 「的/ proc/meminfo中」,O_RDONLY)= 3

cat /proc/meminfo證實,這包含了你正在尋找的信息。

+0

對不起,你能解釋一下你的解決方案的更多一點嗎?如何從緩存中獲取緩存內存? – srchulo

+0

@srchulo你會看到它有一個Key:值對的列表 - 你可以做'free'做的事情,並直接閱讀這個列表來找到你關心的事情。 – Flexo

0

您可以從/proc/meminfo閱讀:

perl -ne's/^Cached: *//&&print' /proc/meminfo 

,或者直接只在KB值:

perl -anE'/^Cached/&&say$F[1]' /proc/meminfo