我正在写一个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
上运行正则表达式,但如果存在,我更喜欢另一种解决方案。谢谢!
答案 0 :(得分:6)
正在运行strace free -m
表明它正在使用/proc/mem
:
open(“/ proc / meminfo”,O_RDONLY)= 3
cat /proc/meminfo
确认这包含您要查找的信息。
答案 1 :(得分:2)
我不确定您仅是否需要Perl解决方案,或者是否可以接受任何命令行解决方案。以防万一,这是一个简单的AWK解决方案:
free -m | awk '/^Mem:/{print $NF}'
将打印您感兴趣的号码。
如果必要,您可以将其分配给某个shell变量:
$ c_val=`free -m | awk '/^Mem:/{print $NF}'`
$ echo $c_val
将显示要验证的值。
awk
命令的说明:
/^Mem:/
在开始时搜索包含字符串Mem:
的行。如果找到它,则在该行上打印 last 项目,这是我们感兴趣的数字。在awk中,该行被分成基于空格的字段。 $0
是整行,$1
是第一个字段,$2
是第二个字段等。每行的字段数由预定义的awk NF
变量给出,因此我们可以使用$NF
访问该行的最后一个字段。
我们也可以使用这个awk命令:
awk 'NR==2{print $NF}'
使用包含当前行号的预定义awk NR
变量。在这种情况下,我们打印第二行的最后一项(字段)。
答案 2 :(得分:0)
您可以从/proc/meminfo
:
perl -ne's/^Cached: *//&&print' /proc/meminfo
或直接仅以kB为单位的值:
perl -anE'/^Cached/&&say$F[1]' /proc/meminfo