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

打开(“/proc/meminfo”,O_RDONLY)= 3

cat /proc/meminfo确认其中包含您要查找的信息。

于 2012-07-04T15:43:43.423 回答
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第二个等。每行的字段数由预定义的 awkNF变量给出,因此我们可以使用$NF.

我们也可以使用这个 awk 命令:

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

它使用NR包含当前行号的预定义 awk 变量。在这种情况下,我们在第二行打印最后一项(字段)。

于 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 回答