我试图了解我们正在尝试运行的大规模模拟的内存使用情况.当我运行它"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
Run Code Online (Sandbox Code Playgroud)
我们在该模拟中有三个阵列,每个阵列占用1.6gb(2亿个双打).根据中的信息
我预计内存将被列在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
Run Code Online (Sandbox Code Playgroud)
和交换根本没用!除了它无论如何它太小的事实.那么RSS与VSZ的差异来自哪里呢?为什么我们分配VSZ的一部分而不是RSS的一部分呢?
我感谢所有的帮助
对你的问题的简单回答是,数组是在虚拟空间中定义的,这就是为什么只有当你使用数组它才会成为RSS的一部分时才会在VSZ中显示数组的内存.在我看来,保持你的思维简单会给你解释.VSZ是一个进程可以使用的虚拟内存,而RSS是目前实际分配的物理内存.当实际使用虚拟内存时,OS将分配内存,这将增加RSS.
| 归档时间: |
|
| 查看次数: |
11339 次 |
| 最近记录: |