java内存溢出自动dump_Java内存溢出(OutOfMemory),内存分析相关工具

在昨天写完那篇日志的2小时之后,这个破玩意终于被我搞定了

看来以后还是要多写日志啊。。。。sigh

终于不用再心力憔悴了

在昨天写完那篇日志的2小时之后,这个破玩意终于被我搞定了

看来以后还是要多写日志啊。。。。sigh

终于不用再心力憔悴了

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

先直接说相关分析工具吧:

1、jconsole

这是java 1.5还是1.6自带的工具

在JDK_HOME\bin\可以找到

GUI的界面让人看起来很舒服

在你的JAVA application运行时,打开它,它会自动搜索正在运行的java程序,不过是用ID的形式显示的,如果你不能确定要分析的是哪一个,点开一个进去查看“VM摘要”项的类路径就可以了

开始以后,就可以查看堆内存的使用状况、线程、CPU、和类的状况,都是用曲线的形式展现的,比较直观,见下图

61318260_1.jpg

这个工具的主要作用就是可以直观的观察内存的使用状况,但是却不能做进一步的分析

2、jmap+jhat

下表是Sun官方给出的工具的作用范围

表 1. 为诊断共同的问题使用的工具

问题

症状

诊断工具

a.gif

类的增长率很高

类的实例数异常

内存图(jmap)

参见jmap -histo选项

对象被意外引用

jconsole或jmap与jhat

参见jmap -dump选项

对象挂起,无法完成

jconsole

jmap -dump与jhat

对象监视器或java.util.concurrent锁上的线程阻拦

线程CPU时间连续地增加

jconsole与JTop

线程的争用统计值很高

jconsole

jmap被官方叫做内存图

在你有内存溢出危险的application运行前,在JVM的运行参数后加上-XX:+HeapDumpOnOutOfMemoryError

这样每次你的程序跑到OutOfMemory就会在本地保存一个文件以供你分析,文件的命名形式是java_pidxxxx.hprof,xxxx代表了该进程的id号

有了这个hprof

就可以到cmd下,JDK_HOME\bin\,运行jhat

这样java就给你开了一个web的服务器

运行浏览器在里面输入http://localhost:7000

就可以看到该hprof里面的东西

当然是以类或者其他形式来进行分类的

但是如果你的堆内存过大或者某一项残留的东西较多的时候

很容易搞到浏览器死掉

我是每次必死

所以只好换其他的工具来进行分析

3、java profiler

这种工具很多,你在google里面输入java profiler会出来很多相关的工具

我用的是YourKit Java Profiler 6.0.2

61318260_2.jpg

这个东西也有着直观的曲线图和其他一系列分析工具,很强大

可以设置在你OutOfMemory的时候保存一个snapshot在本地

不过这个工具自己抓的snapshot不知道里面是什么东西

分析起来也是云里雾里的

我在这些snapshot上纠结了整整三天,无果

昨天突发奇想用他打开了jmap抓的那个hprof.....

一下子豁然明朗了。。。问题也就迎刃而解

这个工具还有很多很多的功能,用空可以详细的研究一下

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

昨晚程序运行了一夜,早上起来一看轻松跑到了一万六而且只用了16M左右的内存

赞美啊赞美

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值