天天看點

java hprof 分析_[轉]Sun JDK自帶JVM記憶體使用分析工具HProf

Sun JDK自帶JVM記憶體使用分析工具HProf

2008-10-14 11:27

Sun JDK自帶JVM記憶體使用分析工具HProf       使用Sun JDK自帶JVM記憶體使用分析工具HProf可以分析JVM堆棧,進而找到占用記憶體較大的對象。這對應經常出現記憶體洩漏(OOM)的JAVA系統進行調優很有幫助。

HProf使用方法

·         在WeblogicServer啟動腳本中增加-Xrunhprof:heap=sites,重新啟動WeblogicServer。

·         使用kill -3 或退出WeblogicServer均會生成java.hprof.txt檔案,直接打開此檔案便可分析JVM的具體運作情況。

從java.hprof.txt記錄的JVM堆棧結果中可以發現JVM占用記憶體較大的對象:

percent         live       alloc'ed stack class

rank   self accum    bytes objs   bytes objs trace name

1 4.57% 4.57% 2289696 47702 8392224 174838 4251 [C

2 3.99% 8.57% 2000016    1 2000016    1 12308 [C

3 3.65% 12.22% 1827552 9622 1852672 10082 43265 [C

4 2.58% 14.80% 1293912 53913 3929424 163726 4258 java.lang.String

5 2.05% 16.85% 1028664 7585 3207272 24923 4252 [C

6 2.03% 18.88% 1015816 159 1015816 159 18694 [B

7 1.88% 20.77%   942080 230 2740224 669 20416 [B

8 1.61% 22.37%   805752 2142 2150856 4635 45318 [B

9 1.60% 23.98%   802880 772 802880 772 24710 weblogic.servlet.utils.URLMatchMap$URLMatchNode

10 1.60% 25.57%   799400 19985 2781400 69535 45073 cnc.util.Field

11 1.36% 26.93%   679360 3805 679360 3805   494 [B

12 1.35% 28.28%   674856 28119 5181240 215885 2985 java.util.HashMap$Entry

……

……

96 0.19% 63.73%    94776 3112   94776 3112 9146 [C

97 0.19% 63.92%    93456 3894 123936 5164 23631 java.lang.String

98 0.19% 64.10%    93224 3884 123968 5165 23644 java.lang.String

99 0.19% 64.29%    93192 3883 123936 5164 23636 java.lang.String

100 0.18% 64.47%    89528 238 240264 520 33227 [B

101 0.17% 64.64%    86448 1901 103472 2255 18715 java.lang.Object

102 0.17% 64.81%    85464 676   85768 695 18715 [S

103 0.17% 64.98%    85184 1331   85184 1331 28266 weblogic.ejb20.internal.MethodDescriptor

104 0.17% 65.15%    84224 752   84224 752 24148 weblogic.servlet.internal.dd.ServletDescriptor

105 0.17% 65.32%    84136 528 50471136 348769    63 [C

106 0.16% 65.48%    79968 1428 388976 6946 5503 java.lang.reflect.Method

107 0.15% 65.63%    77520 1615   77520 1615 27967 weblogic.ejb20.deployer.mbimpl.MethodInfoImpl

108 0.15% 65.79%    77056 4816 469808 29363 20250 java.lang.Object

109 0.15% 65.94%    76960   74   76960   74 23695 [B

110 0.15% 66.09%    76104 3171 215040 8960 45071 cnc.util.FyCol

111 0.15% 66.24%    74688 3112   74688 3112 9152 java.util.Hashtable$Entry

112 0.15% 66.39%    74688 3112   74688 3112 9147 java.lang.String

113 0.15% 66.54%    74280   61 794328 788 45313 [C

114 0.14% 66.68%    72480 1510 436032 9084 45353 [C

115 0.14% 66.82%    70720   68   70720   68 25869 [B

116 0.14% 66.97%    70720   68   70720   68 27448 [B

117 0.14% 67.11%    70272 1279 142672 2439 5503 [C

118 0.14% 67.24%    69256   86   69256   86 6584 [S

119 0.13% 67.38%    67056   66   67056   66 28882 java.lang.Object

120 0.13% 67.51%    66176 752   66176 752 24170 weblogic.servlet.internal.dd.UIDescriptor

121 0.13% 67.64%    65688 715   65688 715 25389 [C

122 0.13% 67.77%    65600    4 885600   54 23939 [C

123 0.13% 67.90%    65600    4 623200   38 40639 [C

124 0.13% 68.03%    65576 367   65576 367 51686 [C

125 0.13% 68.17%    65568    2   65568    2 30610 java.util.HashMap$Entry

126 0.13% 68.30%    65568    2 130816   16 43271 java.util.HashMap$Entry

127 0.13% 68.43%    65552    1   65552    1 16617 [B

128 0.13% 68.56%    64600 1615   64600 1615 27969 java.util.HashMap

129 0.13% 68.68%    63888 2662   64032 2668 16951 java.util.HashMap$Entry

130 0.13% 68.81%    63888 2662   64032 2668 16997 java.util.HashMap$Entry

131 0.13% 68.94%    63888 2662   64032 2668 16996 weblogic.rmi.internal.ClientMethodDescriptor

132 0.13% 69.07%    63888 2662   99120 4130 16949 java.lang.String

133 0.13% 69.19%    63888 2662   64032 2668 16976 java.lang.String

134 0.13% 69.32%    63232 152   63232 152 9655 weblogic.utils.collections.ConcurrentHashMap$Entry

135 0.13% 69.45%    63232 152   63232 152 9704 weblogic.utils.collections.ConcurrentHashMap$Entry

136 0.12% 69.57%    62168 3885   82632 5164 23628 [B

137 0.12% 69.69%    61680 406   66904 468     1 [C

138 0.12% 69.82%    61504    4 246016   16 47372 [B

139 0.12% 69.94%    61144   36 91019160 23904    92 [B

140 0.12% 70.06%    61040 763   61040 763 24194 weblogic.servlet.internal.dd.ServletMappingDescriptor

141 0.12% 70.18%    60400 1510 363360 9084 45338 java.util.Hashtable

142 0.12% 70.30%    59544 827   59544 827 24746 weblogic.servlet.internal.ServletRuntimeMBeanImpl

143 0.12% 70.42%    59248 1058 484984 8664 33236 oracle.jdbc.ttc7.TTCItem

144 0.12% 70.53%    58152 232 187176 764   748 [C

145 0.12% 70.65%    57888 2412 161904 6746 16621 java.lang.String

146 0.11% 70.77%    57400 1435   57400 1435 16855 java.util.HashMap

……

……

根據以上的結果,在java.hprof.txt中定位到導緻配置設定大記憶體的操作如下:

TRACE 63:

java.lang.StringBuffer.expandCapacity(StringBuffer.java:202)

java.lang.StringBuffer.append(StringBuffer.java:401)

java.util.zip.ZipFile.getEntry(ZipFile.java:148)

java.util.jar.JarFile.getEntry(JarFile.java:198)

TRACE 92:

java.util.zip.InflaterInputStream.(InflaterInputStream.java:71)

java.util.zip.ZipFile$1.(ZipFile.java:240)

java.util.zip.ZipFile.getInputStream(ZipFile.java:212)

java.util.zip.ZipFile.getInputStream(ZipFile.java:183)

再進一步分析則需要應用開發人員對應用代碼做相應的分析定位。

注意:使用HProf非常消耗資源,切記不要在生産系統使用。