java内存溢出分析⼯具:jmap使⽤实战
在⼀次解决系统tomcat⽼是内存撑到头,然后崩溃的问题时,使⽤到了jmap。
1 使⽤命令
在环境是linux+jdk1.5以上,这个⼯具是⾃带的,路径在JDK_HOME/bin/下
jmap -histo pid>a.log
2 输出结果摘要
Size    Count  Class description
-------------------------------------------------------
353371288      9652324 char[]
230711112      9612963 java.lang.String
139347160      114865  byte[]
76128096        3172004 java.util.Hashtable$Entry
75782280        st.util.IPSeeker$IPLocation
25724272        9115    java.util.Hashtable$Entry[]
9319968 166428  at.util.buf.MessageBytes
8533856 32889  int[]
发现有⼤量的String和⾃定义对象st.util.IPSeeker$IPLocation存在,检查程序发现此处果然存在内存溢出。修改程序上线后再次⽤jmap抓取内存数据:
146881712  207163  byte[]
98976352    354285  char[]
42595272    53558  int[]
11515632    479818  java.util.HashMap$Entry
jdk怎么使用9521896 59808  java.util.HashMap$Entry[]
8887392 370308  st.bean.UnionIPEntry
8704808 155443  at.util.buf.MessageBytes
8066880 336120  java.lang.String
内存溢出问题消除。
注意:这个jmap使⽤的时候jvm是处在假死状态的,只能在服务瘫痪的时候为了解决问题来使⽤,否则会造成服务中断。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。