如何计算"最大连续自由空间"在一个过程中可用吗?

时间:2014-04-04 12:48:11

标签: linux memory x86-64

在我的 64位linux-rhel62 计算机中,我想计算"最大连续可用空间"在一个过程中可用。 似乎可以使用/ proc / self / maps计算细节。但我不知道如何使用该文件来计算连续的自由空间。

知道怎么做吗?

我已按照Linux: how to check the largest contiguous address range available to a process

中提供的perl脚本进行操作

但我的输出为" 18446603339772190720"这不是一个可接受的值,(但我知道这与2 ^ 64有某种关系)。但用户不接受这个价值?这是正确的和预期的输出? 一些旧代码显示"物理内存+交换大小"作为最大连续的自由空间。但我也不相信,因为我每次都得到相同的输出。

请让我知道,为什么我们的内存大小如此自由空间? 告诉我一些亮点,如何找到最大的连续可用空间?

1 个答案:

答案 0 :(得分:1)

perl脚本正在查看

/proc/<pid>/maps

如果您查看Red Hat上流程图的结尾,您会看到如下内容:

7fff105a1000-7fff105a2000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

我能够通过忽略最后一个条目来获得perl脚本给出一个合理的答案,我修改它以在地址大于0x800000000000时退出循环

while (<$maps>) {
        /([0-9a-f]+)-([0-9a-f]+)/;
        last if hex ($1) > hex ( "800000000000" );
        $max = hex ($1) - $end if $max < hex ($1) - $end;
        $end = hex ($2);
}