free -lhコマンドを使用してメモリ使用量を確認していますが、次のような結果が表示されます。
total used free shared buffers cached
Mem: 62G 29G 33G 278M 335M 19G
Low: 62G 29G 33G
High: 0B 0B 0B
-/+ buffers/cache: 9.1G 53G
Swap: 15G 0B 15G
ご覧のとおり、使用されているメモリは29 GB、利用可能なメモリは33 GBですが、top
コマンドを使用して同じことを確認すると、次の出力が表示されます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23555 glassfi+ 20 0 19.896g 5.270g 55092 S 0.0 8.4 121:16.24 java
2457 hg+ 20 0 20.294g 981344 20588 S 0.0 1.5 6:00.18 java
2615 hg+ 20 0 20.294g 950520 20560 S 0.0 1.4 0:22.18 java
1992 tomcat6 20 0 5783768 518860 20976 S 0.0 0.8 8:05.15 java
.................................................
上記の結果から、glassfishは19GBのRAMを使用し、hg +は20GBのRAMを使用することがわかります。これは39GB以上のRAMが使用されることを意味します。
私の質問は、なぜfree -lhコマンドが29 GBのRAMのみを使用したのかを示すことです。
答え1
「VIRT」列は、プロセス内のメモリ量を示します。割り当てられた、実際に使用する量よりも。プロセスは、使用するよりも多くのメモリを割り当てることができます。これは、大きなヒープを割り当てる傾向がありますが、必ずしもすべてを使用するわけではないJavaプロセスの場合に特に当てはまります。 「RES」列には、使用したスペースの量が表示されます。つまり、プロセスで使用されるスペースは5GiB以上glassfish
で、それぞれ1GiB未満ですhg
。