我试图了解我们正在尝试运行的大规模模拟的内存使用情况。当我运行它时“ps”报告
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
我们在该模拟中有三个阵列,每个阵列占用1.6gb(2亿个双打)。基于
中的信息What is RSS and VSZ in Linux memory management
我预计内存会在RSS下列出,但RSS只有377MB。基于stackoverflow线程中的信息,我得出结论,必须换掉内存并查看“free -m”
total used free shared buffers cached
Mem: 64391 5985 58406 0 463 1295
-/+ buffers/cache: 4226 60164
Swap: 4766 0 4766
并且根本没有使用交换!除了它无论如何它太小的事实。那么RSS与VSZ的差异来自哪里呢?为什么我们分配VSZ的一部分而不是RSS的一部分?
我感谢所有帮助
答案 0 :(得分:6)
对你的问题的简单回答是,数组是在虚拟空间中定义的,这就是为什么只有当你使用数组它才会成为RSS的一部分时才会在VSZ中显示数组的内存。 在我看来,保持你的思维简单会给你解释。 VSZ是一个进程可以使用的虚拟内存,而RSS是目前实际分配的物理内存。当实际使用虚拟内存时,OS将分配将增加RSS的内存。