이 Java 프로세스는 얼마나 많은 메모리를 소비합니까? pmap과 top의 결과가 충돌합니다.

이 Java 프로세스는 얼마나 많은 메모리를 소비합니까? pmap과 top의 결과가 충돌합니다.

한 프로세스가 소비하는 정확한 메모리 양을 알고 싶습니다.

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 -xRAM 사용 통계(RSS 열)를 가져오는 데 사용됩니다 .

Java 프로세스의 현재 RAM 사용량은 topRES 열 103MB로 보고됩니다.

관련 정보