このJavaプロセスはどのくらいのメモリを消費しますか?pmapとtopの結果が競合しています

このJavaプロセスはどのくらいのメモリを消費しますか?pmapとtopの結果が競合しています

1 つのプロセスが消費するメモリの正確な量を知りたいだけです。

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の結果は矛盾している、former はシステム メモリの 40% 以上が Java プロセスによって使用されていることを示していますが、top の結果はメモリの 10% のみが Java プロセスによって使用されていることを示しています。

どちらが正しいか?

1 つのプロセスで使用されるメモリの正確な量を知るにはどうすればよいでしょうか?

答え1

仮想メモリと物理メモリを混同しています。

pmap は、上位の VIRT 列 (403m) と一致する仮想メモリ統計 (413588K 使用) を報告しています。これには、他のプロセスと共有されるデータや、ディスクに保存されている他のページが含まれます。

pmap -xRAM 使用状況統計 (RSS 列) を取得するために使用します。

Java プロセスの現在の RAM 使用量はtopRES 列で 103 MB と報告されます。

関連情報