3

私はperlスクリプトを書いていますが、Linuxボックスで現在使用されているキャッシュメモリの量を取得したいと思っています。""を実行するとfree -m、次の出力が得られます。

             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が、別のソリューションが存在する場合はそれをお勧めします。ありがとう!

4

3 に答える 3

6

strace free -mそれが使用していることを示す実行中/proc/mem

open("/proc/meminfo", O_RDONLY) = 3

cat /proc/meminfo探している情報が含まれていることを確認します。

于 2012-07-04T15:43:43.423 に答える
2

Perl ソリューションのみが必要なのか、それともコマンド ライン ソリューションが受け入れられるのかはわかりません。念のため、簡単なAWKソリューションを次に示します。

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

それはあなたが興味を持っている番号を出力します。

必要に応じて、シェル変数に割り当てることができます。

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

確認する値が表示されます。

awkコマンドの説明:

/^Mem:/文字列を先頭に含む行を検索しますMem:。見つかった場合、その行の最後の項目が出力されます。これは、関心のある番号です。awk では、行は空白に基づいてフィールドに分割されます。$0は行全体$1、最初のフィールド、$22 番目などです。行ごとのフィールド数は事前定義された awkNF変数によって指定されるため、行の最後のフィールドには$NF.

次の awk コマンドを使用することもできます。

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

これは、現在の行番号を含む定義済みの awkNR変数を利用します。この場合、最後の項目 (フィールド) を 2 行目に出力します。

于 2012-07-04T15:56:31.490 に答える
0

から読むことができます/proc/meminfo

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

または直接 kB の値のみ:

perl -anE'/^Cached/&&say$F[1]' /proc/meminfo
于 2012-07-04T20:29:32.547 に答える