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        3157595 com.test.util.IPSeeker$IPLocation  
25724272        9115    java.util.Hashtable$Entry[] 
9319968 166428  org.apache.tomcat.util.buf.MessageBytes 
8533856 32889   int[] 

发现有大量的String和自定义对象com.test.util.IPSeeker$IPLocation存在,检查程序发现此处果然存在内存溢出。修改程序上线后再次用jmap抓取内存数据: 

146881712   207163  byte[] 
98976352    354285  char[] 
42595272    53558   int[] 
11515632    479818  java.util.HashMap$Entry 
9521896 59808   java.util.HashMap$Entry[] 
8887392 370308  com.test.bean.UnionIPEntry  
8704808 155443  org.apache.tomcat.util.buf.MessageBytes 
8066880 336120  java.lang.String  

内存溢出问题消除。 
注意: 这个jmap使用的时候jvm是处在假死状态的,只能在服务瘫痪的时候为了解决问题来使用,否则会造成服务中断。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java内存泄漏是指在程序运行过程中,由于程序设计不当或者其他原因,导致程序中的一些对象在没有被使用的情况下仍然占用着内存空间,这些对象无法被垃圾回收器回收,最终导致程序内存泄漏的问题。下面介绍一些Java内存泄漏问题的调查定位方法。 1. 使用jmap命令 jmapJava虚拟机自带的一个命令行工具,可以用来生成Java堆转储快照。使用jmap命令可以查看当前Java虚拟机堆内存中的对象分布情况,以及各个对象的数量和大小等信息。通过分析jmap生成的快照可以定位内存泄漏的问题所在。 2. 使用jstack命令 jstack也是Java虚拟机自带的一个命令行工具,用于生成Java虚拟机当前线程的堆栈信息。当程序出现死锁或者线程阻塞等问题时,可以使用jstack命令查看当前线程的堆栈信息,以帮助定位问题所在。 3. 使用内存分析工具 除了使用命令行工具外,还可以使用一些内存分析工具来帮助定位内存泄漏问题。常用的内存分析工具有Eclipse Memory Analyzer(MAT)、VisualVM等。这些工具可以帮助我们分析Java堆转储快照,查找内存泄漏的原因,并提供针对具体问题的解决方案。 4. 定期检查代码 除了使用工具外,我们还应该定期检查程序的代码,发现并修复潜在的内存泄漏问题。常见的内存泄漏问题包括对象未被正确释放、缓存对象未被清理等。修复这些问题可以有效地避免内存泄漏的发生。 总之,Java内存泄漏问题的调查定位需要综合使用各种工具和方法,找到问题所在并及时解决。通过定期检查程序代码,加强对Java内存管理的理解和掌握,可以有效地预防和避免内存泄漏问题的发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值