2010-02-24 87 views
9

我想知道Java進程在某個特定時間使用的總堆大小,我必須使用jmap。用jmap查找當前堆大小

jmap -heap <pid>輸出給了我這樣的事情:

 
Attaching to process ID 2899, please wait... 
Debugger attached successfully.    
Server compiler detected.     
JVM version is 14.2-b01      

using thread-local object allocation. 
Parallel GC with 2 thread(s)   

Heap Configuration: 
    MinHeapFreeRatio = 40 
    MaxHeapFreeRatio = 70 
    MaxHeapSize  = 1258291200 (1200.0MB) 
    NewSize   = 1048576 (1.0MB)  
    MaxNewSize  = 4294901760 (4095.9375MB) 
    OldSize   = 4194304 (4.0MB)   
    NewRatio   = 8      
    SurvivorRatio = 8      
    PermSize   = 16777216 (16.0MB)  
    MaxPermSize  = 67108864 (64.0MB)  

Heap Usage: 
PS Young Generation 
Eden Space:   
    capacity = 119013376 (113.5MB) 
    used  = 117277608 (111.84464263916016MB) 
    free  = 1735768 (1.6553573608398438MB) 
    98.54153536489882% used 
From Space: 
    capacity = 131072 (0.125MB) 
    used  = 81920 (0.078125MB) 
    free  = 49152 (0.046875MB) 
    62.5% used 
To Space: 
    capacity = 131072 (0.125MB) 
    used  = 0 (0.0MB) 
    free  = 131072 (0.125MB) 
    0.0% used 
PS Old Generation 
    capacity = 954466304 (910.25MB) 
    used  = 80791792 (77.04905700683594MB) 
    free  = 873674512 (833.2009429931641MB) 
    8.46460390077846% used 
PS Perm Generation 
    capacity = 57671680 (55.0MB) 
    used  = 41699008 (39.76727294921875MB) 
    free  = 15972672 (15.23272705078125MB) 
    72.30413263494319% used 

我可以使用這些值的公式,找出所使用的總內存?

有關我如何在Linux上發現這個問題的其他建議,歡迎使用jmap,但是我們會優先考慮jmap。

感謝

回答

2

條目Heap Usage:以下的上市在JVM中的各分割內存池,用自己最大大小一起,使用和自由空間。您可以將各種used:值相加,這應該爲您提供總體內存使用情況的合理值,儘管在列出的池中可能存在某些JVM開銷。

+0

運行'jmap -heap:format = b '並使用Eclipse中的內存分析工具解析堆轉儲文件使我總共22MB。我無法找到一種方法來獲得相同的總價值... – fmoga 2010-02-24 08:48:59

+0

@MelmanRo:我的猜測是,eclipse工具從計算中刪除了所有不可達(即待收集的垃圾)對象,這是計算如果完整的GC掃描運行,堆大小將會是多少。正如我所描述的,我認爲當前*實際*操作系統的內存使用量是各個池的總和。 – skaffman 2010-02-24 08:52:37

+0

這可以成爲如此巨大差異的根源嗎? – fmoga 2010-02-24 09:56:36

3

如果你試圖比較jconsole或jvisualvm與主窗口顯示'總堆使用情況'我發現通過添加'使用的伊甸園空間'和'使用PS老一代空間'我得到了相當於在上述程序中顯示的圖表 - 這就是我現在傾向於使用的內容