2010-02-24 11 views
9

Chciałbym dowiedzieć się, jaki jest łączny rozmiar sterty, który jest używany w pewnym czasie przez proces Java i muszę użyć jmap.Znajdź bieżący rozmiar sterty z jmap

Wyjście jmap -heap <pid> daje mi coś takiego:

 
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 

mogę wykorzystać formułę dla tych wartości, aby dowiedzieć się całkowita pamięć używane?

Inne sugestie dotyczące tego, jak mogę je znaleźć w systemie Linux, są mile widziane, ale jmap jest z nich zadowolony.

Dzięki

Odpowiedz

2

Zapisy pod Heap Usage: są wymieniając różne pule pamięci rozdzielono pomiędzy JVM, wraz z ich wielkości max używane, wolna przestrzeń. Możesz po prostu dodać różne wartości used:, które powinny dać sensowną wartość całkowitego zużycia pamięci, chociaż może wystąpić pewne obciążenie JVM, które nie jest uwzględnione w wymienionych pulach.

+0

Uruchomienie 'jmap -heap: format = b ' i parsowanie pliku zrzutu sterty za pomocą narzędzia Memory Analyzing Tool od Eclipse daje mi całkowite wykorzystanie 22 MB. Nie mogę znaleźć sposobu na uzyskanie tej samej wartości całkowitej ... – fmoga

+0

@MelmanRo: Domyślam się, że narzędzie Eclipse usunęło z obliczeń wszystkie nieosiągalne (tj. Przyszłe śmieci zebrane) obiekty, co jest obliczeniem jaki byłby rozmiar sterty *, gdyby przeprowadzono pełne przeciąganie GC. Uważam, że obecne * rzeczywiste użycie pamięci systemu operacyjnego to sumy różnych pul, tak jak to opisałem. – skaffman

+0

Czy to może być źródłem tak dużej różnicy? – fmoga

3

jeśli próbujesz porównać coś do jconsole lub jvisualvm z głównym oknem wyświetlającym "całkowite zużycie sterty", dowiedziałem się, że przez dodanie "używanej przestrzeni eden" i "użytej przestrzeni starej generacji ps" uzyskałem odpowiednik co ten wykres pokazuje we wcześniej wymienionych programach - to właśnie mam teraz na myśli

Powiązane problemy