2011-07-18 38 views
3

我在Linux Centos機器上運行Java Web應用程序(J2EE + Tomcat6 + struts2 + hibernate)。 問題是「頂部」命令說java正在使用14%的內存(超出8G),但在摘要信息部分,表示整體可用內存爲300M! (只是Mem,不換)Java Web應用程序:奇怪的內存統計

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP TIME CODE DATA nFLT COMMAND                                 
    666 root  20 0 1352m 1.2g 10m S 7.6 14.7 663:00.37 158m 663:00 36 1.3g 65 java 
    3170 mysql  18 0 145m 33m 5044 S 0.7 0.4 753:51.96 111m 753:51 6496 132m 100 mysqld                                 
    17340 root  15 0 2332 1080 800 R 0.3 0.0 0:00.05 1252 0:00 56 468 0 top                                  
     1 root  15 0 2068 628 536 S 0.0 0.0 0:02.58 1440 0:02 32 280 20 init                                  
     2 root  RT -5  0 0 0 S 0.0 0.0 0:00.18 0 0:00 0 0 0 migration/0                                
     3 root  34 19  0 0 0 S 0.0 0.0 0:00.00 0 0:00 0 0 0 ksoftirqd/0                                
     4 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 0 0:00 0 0 0 watchdog/0                                
     5 root  RT -5  0 0 0 S 0.0 0.0 0:00.01 0 0:00 0 0 0 migration/1                                
     6 root  34 19  0 0 0 S 0.0 0.0 0:00.00 0 0:00 0 0 0 ksoftirqd/1                                
     7 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 0 0:00 0 0 0 watchdog/1                                
     8 root  RT -5  0 0 0 S 0.0 0.0 0:00.01 0 0:00 0 0 0 migration/2 

. 
. 
. 
and so on... 



Mem: 8300688k total, 7998720k used, 301968k free, 52452k buffers 
Swap: 16779884k total,  60k used, 16779824k free, 6511228k cached 

是什麼問題?祕密地使用記憶有什麼用?非堆或什麼?! 感謝好友。

+1

你能發佈所有的最高統計數據嗎?你當然不只是在你的機器上運行Java。 – Thomas

+0

@托馬斯:我做了好友。他們幾乎都是0%! –

回答

1

6511228k cached意味着〜6.5GB的RAM被您的操作系統用於緩存。

+0

'free -lm'對檢查內存使用情況也很有用。 – Vlad

+0

ew ...!謝謝哥們!那小小的愛情! ;) –

1

如果您使用的是Java 5+,則應該可以使用jconsole連接到JVM。你應該能夠看到JVM使用的所有內存。除非JVM實現中存在一個錯誤(我懷疑),否則您看到的數字就是JVM使用的所有數據。

如果這足夠低,那麼其他進程將使用該內存。