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非常消耗资源,切记不要在生产系统使用。

你可能感兴趣的:(Android框架)