我运行以下简单程序
#include <stdio.h>
#include <stdlib.h>
int
main() {
malloc(1024*1024*32);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
htop 给出这个
VIRT RES SHR
36684 312 240
Run Code Online (Sandbox Code Playgroud)
pmap -x 给出这个
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 0 4 0 r-x-- a.out
0000000000600000 0 4 4 r---- a.out
0000000000601000 0 4 4 rw--- a.out
00007f063d3b7000 0 4 4 rw--- [ anon ]
00007f063f3b8000 0 228 0 r-x-- libc-2.12.1.so
00007f063f532000 0 0 0 ----- libc-2.12.1.so
00007f063f731000 0 16 16 r---- libc-2.12.1.so
00007f063f735000 0 4 4 rw--- libc-2.12.1.so
00007f063f736000 0 12 12 rw--- [ anon ]
00007f063f73b000 0 108 0 r-x-- ld-2.12.1.so
00007f063f93d000 0 12 12 rw--- [ anon ]
00007f063f958000 0 8 8 rw--- [ anon ]
00007f063f95b000 0 4 4 r---- ld-2.12.1.so
00007f063f95c000 0 4 4 rw--- ld-2.12.1.so
00007f063f95d000 0 4 4 rw--- [ anon ]
00007fff4b298000 0 12 12 rw--- [ stack ]
00007fff4b2d7000 0 4 0 r-x-- [ anon ]
ffffffffff600000 0 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 36684 432 88
Run Code Online (Sandbox Code Playgroud)
htop并pmap显示相同的虚拟大小(36684),但它们显示物理内存的不同内容(htop's RES= 321和pmap's RSS= 432).
也许我迷惑的东西,但有什么区别htop的RES和pmap的RSS?
因此,从 top 的手册页中我们看到:
\n\n\nq: RES -- 驻留大小 (kb)
\n
\n任务已使用的非交换物理内存。
对于 pmap:
\n\n\nRSS:驻留集大小(以千字节为单位)
\n
所以它们似乎是同一件事。但实际上,如果你也检查 ps,你会发现 htop 将显示与 ps 的 RSS 相同的 RES。问题是 ps 在 man 中提到他们显示的测量有点不同:
\n\n\nSIZE 和 RSS 字段不计算进程的某些部分,包括页表、内核堆栈、struct thread_info 和 struct task_struct。这通常是至少 20 KiB 始终驻留的内存。SIZE 是进程的虚拟大小(代码+数据+堆栈)。
\n
这就是 ps 和 pmap 之间的区别,而 htop 和 pmap 实际上是相同的。
\n| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |