pmap 的 RSS 和 htop 的 RES 相同吗?

发布于 2024-10-22 03:57:36 字数 1805 浏览 3 评论 0原文

我运行以下简单程序

#include <stdio.h>
#include <stdlib.h>    
int
main() {
  malloc(1024*1024*32);
  getchar();
  return 0;
}

htop 给出这个

VIRT   RES   SHR
36684  312   240

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

htoppmap 显示相同的虚拟大小(36684),但它们显示物理内存的不同内容(htopRES = 321 和 pmapRSS = 432)。

也许我混淆了一些东西,但是 htopRESpmapRSS 之间有什么区别吗?

I run the following simple program

#include <stdio.h>
#include <stdlib.h>    
int
main() {
  malloc(1024*1024*32);
  getchar();
  return 0;
}

htop gives this

VIRT   RES   SHR
36684  312   240

pmap -x gives this

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

htop and pmap show the same virtual size(36684), but they shows different things for physical memory (htop's RES = 321 and pmap's RSS = 432).

Maybe I confuse something but is there any difference between htop's RES and pmap's RSS?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乙白 2024-10-29 03:57:36

因此,从 top 的手册页中我们看到:

q: RES -- 驻留大小 (kb)
任务已使用的非交换物理内存。

对于 pmap:

RSS:驻留集大小(以千字节为单位)

因此它们似乎是同一件事。但实际上,如果你也检查 ps,你会发现 htop 将显示与 ps 的 RSS 相同的 RES。问题是 ps 在 man 中提到他们显示的测量有点不同:

SIZE 和 RSS 字段不计算流程的某些部分,包括
页表、内核堆栈、struct thread_info 和 struct
任务结构。通常至少有 20 KiB 内存
居民。 SIZE 是进程的虚拟大小(代码+数据+堆栈)。

这就是 ps 和 pmap 之间的区别,而 htop 和 pmap 实际上是相同的。

So, from the man page for top we see that:

q: RES -- Resident size (kb)
The non-swapped physical memory a task has used.

and for pmap:

RSS: resident set size in kilobytes

So they seem to be the same thing. But actually, if you also check with ps you will see that htop will show the same RES as ps's RSS. The thing is that ps mentions in the man that they show a measurement a little bit different:

The SIZE and RSS fields don’t count some parts of a process including
the page tables, kernel stack, struct thread_info, and struct
task_struct. This is usually at least 20 KiB of memory that is always
resident. SIZE is the virtual size of the process (code+data+stack).

So that would be the difference between ps and pmap and it's actually the same for htop and pmap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文