
한 프로세스가 소비하는 정확한 메모리 양을 알고 싶습니다.
pgrep java -l
21786 java
내가 가지고 있는 총 메모리는 1GB입니다.
[root@home tmp]# free -m
total used free shared buffers cached
Mem: 1024 952 71 0 0 0
-/+ buffers/cache: 952 71
Swap: 0 0 0
java는 413588K를 사용합니다. 이는 Java에서 사용하는 메모리의 40% 이상입니다.
pmap 21786
......
b7fc2000 4K r-x-- /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
b7fc3000 4K rwx-- [ anon ]
b7fc4000 4K r-x-- [ anon ]
b7fc5000 108K r-x-- /lib/ld-2.5.so
b7fe0000 4K r-x-- /lib/ld-2.5.so
b7fe1000 4K rwx-- /lib/ld-2.5.so
bf85b000 84K rwx-- [ stack ]
total 413588K
top - 23:40:54 up 22 days, 6:17, 5 users, load average: 0.02, 0.04, 0.03
Tasks: 100 total, 2 running, 98 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.7%us, 1.3%sy, 0.0%ni, 97.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1048800k total, 975180k used, 73620k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21786 mirror 19 0 403m 102m 8712 S 0.3 10.0 0:10.52 java
상위 결과에 Java 프로세스에서 메모리의 10%만 사용한다고 표시되는 이유는 무엇입니까?
따라서 top과 pmap의 결과가 충돌합니다., fommer는 Java 프로세스에서 시스템 메모리의 40% 이상을 사용하고 있음을 나타냅니다. 그러나 top의 결과는 Java 프로세스에서 메모리의 10%만 사용함을 나타냅니다.
어느 것이 맞나요?
한 프로세스에서 사용하는 메모리의 정확한 양을 어떻게 알 수 있나요?
답변1
가상 메모리와 실제 메모리를 혼동하고 있습니다.
pmap은 최상위 VIRT 열(403m)과 일치하는 가상 메모리 통계(413588K 사용)를 보고합니다. 여기에는 다른 프로세스와 공유되는 데이터 및 디스크에 저장된 다른 페이지가 포함됩니다.
pmap -x
RAM 사용 통계(RSS 열)를 가져오는 데 사용됩니다 .
Java 프로세스의 현재 RAM 사용량은 top
RES 열 103MB로 보고됩니다.