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小时内删除。
发表评论