如何计算流程中可用的"Max Contiguous Free Space"?



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

知道如何做到这一点吗?

我遵循了Linux中给出的perl脚本:如何检查进程可用的最大连续地址范围

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

请让我知道,为什么我们得到像可用空间这样不可能的内存大小?给我看一些光,如何找到最大连续可用空间?

那个 perl 脚本正在查看

/proc/<pid>/maps

如果您查看红帽流程图的末尾,您会看到如下所示的内容:

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);
}

最新更新