
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 -x
RAM 使用状況統計 (RSS 列) を取得するために使用します。
Java プロセスの現在の RAM 使用量はtop
RES 列で 103 MB と報告されます。