pmap 및 ps 명령을 사용할 때 RSS(Resident Set Size)가 다릅니다.

pmap 및 ps 명령을 사용할 때 RSS(Resident Set Size)가 다릅니다.
 
$ pmap -x 10400
10400:   ./a.out
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000       0       0       0 r-x--  a.out
0000000000600000       0       4       4 r----  a.out
0000000000601000       0       4       4 rw---  a.out
00007f957085f000       0       4       0 r-x--  libc-2.15.so
00007f9570a12000       0       0       0 -----  libc-2.15.so
00007f9570c11000       0      16      16 r----  libc-2.15.so
00007f9570c15000       0       8       8 rw---  libc-2.15.so
00007f9570c17000       0       8       8 rw---    [ anon ]
00007f9570c1c000       0       0       0 r-x--  ld-2.15.so
00007f9570e1f000       0      12      12 rw---    [ anon ]
00007f9570e3c000       0       8       8 rw---    [ anon ]
00007f9570e3e000       0       4       4 r----  ld-2.15.so
00007f9570e3f000       0       8       8 rw---  ld-2.15.so
00007fff18a6d000       0      12      12 rw---    [ stack ]
00007fff18bff000       0       4       0 r-x--    [ anon ]
ffffffffff600000       0       0       0 r-x--    [ anon ]
----------------  ------  ------  ------
total kB            4148      92      84
 

RSS는 92입니다

 
$ ps -o rss,sz,vsz 10400
  RSS    SZ    VSZ
   80  1037   4148

RSS는 80입니다

왜 그리고 무슨 일이 일어났나요?

답변1

ps 매뉴얼 페이지에서:

   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).

답변2

기본적으로 이는 서로 다른 데이터 소스를 사용하기 때문에 발생할 수 있습니다. - /proc/PID/maps는 pmap에서 사용됩니다. - /proc/PID/stat는 ps에서 사용됩니다.

이러한 소스에는 다양한 방법을 사용하여 계산된 데이터가 포함되어 있습니다(보고된 바에 따르면여기, 예를 들어).

관련 정보