gpt4 book ai didi

Linux `top` 命令 : how much process memory is physically stored in swap space?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:11 27 4
gpt4 key购买 nike

假设我在具有 64 Gb RAM 的 64 位 Linux 机器上运行我的程序。在我开始后的非常小的 C 程序中,我立即执行了

void *p = sbrk(1024ull * 1024 * 1024 * 120);

这使我的数据段向前突破 120 Gb。

在上面的 sbrk 调用 top 之后,我的进程条目显示 RES 处于某个低值,VIRT120gSWAP 120g

在此操作之后,我将一些内容写入上述区域的前 90 Gb

memset(p, 0xAB, 1024ull * 1024 * 1024 * 90);

这会导致我进程的 top 条目发生一些变化:VIRT 预计保持在 120gRES几乎变成 64gSWAP 下降到 56g 左右。

top 输出 header 中的常见 Swap 统计信息显示交换文件使用量增加,这是预期的,因为我的程序将不得不推送大约 26 Gb 的内存页面进入交换文件。

因此,根据以上观察,SWAP 列只是报告我的进程的非 RES 地址空间,而不管该地址空间是否已“物化”,即无论我是否已经在该虚拟内存区域中写入了一些内容。

但是有没有什么方法可以计算出有多少 SWAP 大小实际上已经“具体化”并由存储在交换文件中的东西备份? IE。有没有办法让 top 显示我的进程的 26 Gb 值?

最佳答案

行为取决于您使用的 procps 版本。例如,在版本 3.0.5 中,SWAP 值等于:

task->size - task->resident

这正是您遇到的情况。男人 top.1 说:

VIRT = SWAP + RES

然而,procps-ng 读取/proc/pid/status 并正确设置 SWAP

https://gitlab.com/procps-ng/procps/blob/master/proc/readproc.c#L383

因此,您可以更新 procps 或直接查看/proc/pid/status

关于Linux `top` 命令 : how much process memory is physically stored in swap space?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com