Memory VSZ vs RSS内存和交换空间

Memory VSZ vs RSS内存和交换空间,memory,ps,Memory,Ps,我试图了解我们正在尝试运行的大规模模拟的内存使用情况。当我运行“ps”报告时 在该模拟中,我们有三个阵列,每个阵列占用1.6gb(2亿双倍)。根据 我希望内存列在RSS下,但RSS只有377MB。根据stackoverflow线程中的信息,我得出结论,必须将内存调出并查看“free-m” 而且根本不使用交换!除了它太小这一事实之外。那么RSS和VSZ的区别来自哪里呢?为什么我们分配的数组是VSZ的一部分而不是RSS的一部分 感谢所有帮助对您的问题的简单回答是数组是在虚拟空间中定义的,这就是为什

我试图了解我们正在尝试运行的大规模模拟的内存使用情况。当我运行“ps”报告时

在该模拟中,我们有三个阵列,每个阵列占用1.6gb(2亿双倍)。根据

我希望内存列在RSS下,但RSS只有377MB。根据stackoverflow线程中的信息,我得出结论,必须将内存调出并查看“free-m”

而且根本不使用交换!除了它太小这一事实之外。那么RSS和VSZ的区别来自哪里呢?为什么我们分配的数组是VSZ的一部分而不是RSS的一部分


感谢所有帮助

对您的问题的简单回答是数组是在虚拟空间中定义的,这就是为什么只有当您使用数组时,数组的内存才会显示在VSZ中。它将成为RSS的一部分。
在我看来,保持你的思维简单会给你解释。VSZ是进程可以使用的虚拟内存,而RSS是目前实际分配的物理内存。当实际使用虚拟内存时,操作系统将分配内存,这将增加RSS

程序是否实际接触(读或写)了这些数组中的条目?一个进程可以“分配”尽可能多的内存,只要它有可用的地址空间,就可以不受限制地分配机器上可用的ram/交换量。在进程实际接触内存之前,实际内存不会分配给进程。如果操作系统当时没有任何可用内存,那么进程将立即终止。试着看一下“VSIZE”,也让你的程序在分配后将这些数组中的每一个都设置为特定的值,比如0。非常感谢你的评论,它已经非常有用了。你是对的,程序当时还没有接触到这些阵列。之后,数组通过一个循环进行初始化,这个循环甚至不涉及所有数组元素。你知道在这种情况下RSS和VSZ会发生什么变化吗?假设循环只在数组的前半部分循环。RSS只会增加800MB吗?知道这一点会非常有用。非常感谢你的回答,它已经帮了很多忙了。你知道我在回复joeking的评论时所描述的情况吗?@ftiaronsem如果你的操作系统能够轻松地将所有页面保存在RAM中,那么RSS将增加800MB,但在我看来,你无法预测之前的情况。当然,RSS将随着访问阵列的数量成比例增加。但是,它是按页面大小块分配的。我不知道你系统上的页面大小,但可能是4KB或8KB。(将是二的幂)。触摸4KB页面中的任何字节,整个页面将被提交到内存(RSS)。@joeking RSS是否包含交换区域中的页面?请参阅:
USER    PID %CPU %MEM     VSZ    RSS TTY    STAT START   TIME COMMAND
myuser 5252 97.7  0.5 5751412 377392 ?      Rs   19:49   1:15 myprogram
             total       used       free     shared    buffers     cached
Mem:         64391       5985      58406          0        463       1295
-/+ buffers/cache:       4226      60164
Swap:         4766          0       4766