2015-06-23 3 views
4

В следующем вопросе: Possible Spring Boot or Spring Security Memory Leakкак печатать объекты Java использование памяти

Пользователя печатает объекты Java следующим образом:

num  #instances   #bytes class name 
---------------------------------------------- 
    1:  395984  32564344 [C 
    2:  388697  9328728 java.lang.String 
    3:   61258  5915088 [B 
    4:  100297  4814256 java.util.HashMap 
    5:   50892  4478496 org.apache.catalina.session.StandardSession 
    6:   58774  3656824 [Ljava.util.HashMap$Node; 
    7:   84773  3390920 java.util.TreeMap$Entry 
    8:   51522  3339304 [Ljava.util.Hashtable$Entry; 
    9:   51834  3317376 java.util.concurrent.ConcurrentHashMap 
    10:  102111  3267552 java.util.HashMap$Node 
    11:   96256  3080192 java.util.concurrent.ConcurrentHashMap$Node 
    12:   24101  2754560 [Ljava.util.concurrent.ConcurrentHashMap$Node; 
    13:   51472  2470656 java.util.Hashtable 
    14:   55102  2204080 java.util.LinkedHashMap$Entry 
    15:   83020  1992480 java.util.ArrayList 
    16:   34353  1923768 java.util.LinkedHashMap 
    17:   59156  1892992 org.springframework.boot.loader.util.AsciiBytes 
    18:   29574  1656144 org.springframework.boot.loader.jar.JarEntryData 
    19:   18029  1586552 java.lang.reflect.Method 
    20:   28391  1562080 [Ljava.lang.Object; 
    21:   37178  1487120 java.lang.ref.SoftReference 
    22:   47648  1446600 [I 
    23:   52337  1256088 java.lang.Long 
    24:   26134  1254432 java.util.TreeMap 
    25:   50904  1221696 java.beans.PropertyChangeSupport 
    26:   11777  1214464 java.lang.Class 
    27:   23748  1139904 org.springframework.security.oauth2.provider.OAuth2Request 
    28:   35994   863856 java.util.Collections$UnmodifiableRandomAccessList 
    29:   50904   814464 java.beans.PropertyChangeSupport$PropertyChangeListenerMap 
    30:   50892   814272 org.apache.catalina.session.StandardSessionFacade 
    31:   49748   795968 java.util.HashSet 
    32:   24066   770112 java.util.Collections$UnmodifiableMap 
    33:   23748   759936 org.springframework.security.oauth2.provider.OAuth2Authentication 
    34:   23748   759936 org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails 
    35:   26000   624000 javax.management.openmbean.CompositeDataSupport 
    36:   12015   576664 [Ljava.lang.String; 
    37:   16319   522208 com.sun.org.apache.xerces.internal.xni.QName 
    38:   15288   489216 java.lang.ref.WeakReference 
    39:   26448   423168 java.util.LinkedHashSet 
    40:   26011   416176 java.util.TreeMap$KeySet 

Какой команда сделали использование пользователя печатать эту информацию?

Btw, я добавил следующие аргументы в свой Java-процесс.

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log -verbose:gc 

Надеюсь, я правильно сформулировал вопрос.

ответ

4

То есть выход jmap -histo. Возможно jmap -histo:live. Вы запускаете его как внешний инструмент и поставляете pid JVM. Он предоставляется в каталоге bin вашей установки jdk.

Обычно он безопасен для запуска в производстве, но вы должны знать, что jmap -histo:live запускает полный GC, который необходим для отображения только живых объектов. jmap -histo не запускает GC.

jmap documentation

0

Вы можете создать этот тип информации с помощью:

java -agentlib:hprof=heap=sites <Your program> 

Обратитесь к Oracle/Sun ДОКУМЕНТАЦИЯ HPROF

Точный формат немного отличается от того, что вы представили, но информация такая же ,

1

В качестве альтернативы вы можете создать кучу-дампа. Затем используйте утилиту jmap для получения гистограммы из дампа кучи. Если вы используете JDK IBM, вы можете использовать анализатор памяти инструмент IBM, (MAT), чтобы получить гистограмму

https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/memleaks.html#gbywm http://www.ibm.com/developerworks/java/jdk/tools/memoryanalyzer/

Смежные вопросы