Linux的`top`命令:身体有多少进程内存存储在交换空间?

问题描述 投票:1回答:1

比方说,我在64位Linux机器上运行我的程序与RAM 64 GB。在我很小的C程序后立即启动怎么办

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

这个移动我的数据段由120千兆突破前进。

经过我的过程中,上述sbrk呼叫top条目显示RES在一些低价值,VIRT120g,并在SWAP 120g

此操作之后,我写的东西到第90千兆上述范围的

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

这导致了我的过程中top进入一些变化:VIRT果然保持在120gRES变得几乎64gSWAP下降到周围56g

Swap输出节目标题中的常见top的统计信息交换文件的使用增加,这是意料之中的,因为我的程序将不得不推约26 GB的内存页到交换文件。

因此,根据上述观察,SWAP列只是报告我进程的非RES地址空间,无论此地址空间是否已经被“物化”,即不管是否我已经写的东西到虚拟内存的那个区域。

但有什么办法弄清楚怎么说SWAP大小的多少实际上已被“物化”,并存储在交换文件的东西备份?即有没有什么办法让top以显示我的过程,26千兆价值?

linux virtual-memory top-command swapfile memory-overcommitment
1个回答
1
投票

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

task->size - task->resident

而正是你所遇到什么。男人TOP.1说:

VIRT = SWAP + RES

procps的-NG,但是,读/ proc /进程/状态,并设置正确SWAP

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

所以,你可以更新或procps的在/ proc /进程/状态直视

© www.soinside.com 2019 - 2024. All rights reserved.