$ 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에서 사용됩니다.
이러한 소스에는 다양한 방법을 사용하여 계산된 데이터가 포함되어 있습니다(보고된 바에 따르면여기, 예를 들어).