http://uglytroll.ycool.com/post.3046111.html
1、jconsole
这是java 1.5还是1.6自带的工具
在JDK_HOME\bin\可以找到
GUI的界面让人看起来很舒服
在你的JAVA application运行时,打开它,它会自动搜索正在运行的java程序,不过是用ID的形式显示的,如果你不能确定要分析的是哪一个,点开一个进去查看“VM摘要”项的类路径就可以了
开始以后,就可以查看堆内存的使用状况、线程、CPU、和类的状况,都是用曲线的形式展现的,比较直观,见下图
这个工具的主要作用就是可以直观的观察内存的使用状况,但是却不能做进一步的分析
2、jmap+jhat
下表是Sun官方给出的工具的作用范围
表 1. 为诊断共同的问题使用的工具
问题
症状
诊断工具
内存不足
OutOfMemoryError
Java 堆分析工具 (jhat)
内存泄漏
内存的使用增长
频繁的无用单元回收
Java 监视和管理控制台(jconsole)
JVM 统计监视工具(jstat)
类的增长率很高
类的实例数异常
内存图(jmap)
参见jmap -histo选项
对象被意外引用
jconsole或jmap与jhat
参见jmap -dump选项
Finalizer
对象挂起,无法完成
jconsole
jmap -dump与jhat
死锁
对象监视器或java.util.concurrent锁上的线程阻拦
jconsole
堆栈检索(jstack)
循环线程
线程CPU时间连续地增加
jconsole与JTop
严重的锁争用
线程的争用统计值很高
jconsole
jmap被官方叫做内存图
在你有内存溢出危险的application运行前,在JVM的运行参数后加上-XX:+HeapDumpOnOutOfMemoryError
这样每次你的程序跑到OutOfMemory就会在本地保存一个文件以供你分析,文件的命名形式是java_pidxxxx.hprof,xxxx代表了该进程的id号
有了这个hprof
就可以到cmd下,JDK_HOME\bin\,运行jhat <刚才那个hprof的本地路径>
这样java就给你开了一个web的服务器
运行浏览器在里面输入http://localhost:7000
就可以看到该hprof里面的东西
当然是以类或者其他形式来进行分类的
但是如果你的堆内存过大或者某一项残留的东西较多的时候
很容易搞到浏览器死掉
我是每次必死
所以只好换其他的工具来进行分析
3、java profiler
这种工具很多,你在google里面输入java profiler会出来很多相关的工具
我用的是YourKit Java Profiler 6.0.2
这个东西也有着直观的曲线图和其他一系列分析工具,很强大
可以设置在你OutOfMemory的时候保存一个snapshot在本地
不过这个工具自己抓的snapshot不知道里面是什么东西
分析起来也是云里雾里的
我在这些snapshot上纠结了整整三天,无果
昨天突发奇想用他打开了jmap抓的那个hprof.....
一下子豁然明朗了。。。问题也就迎刃而解
这个工具还有很多很多的功能,用空可以详细的研究一下
以下是这些工具的SUN官方说明:
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
[color=red]linux下jdk5以上版本,这些工具都是sun自带的,在java/bin/目录下都已经有的,直接命令行就可以使用了。
我曾经实际使用的就是jmap:
jmap -histo pid>a.log不过注意:这个只能在服务已经宕机的情况下使用,实际使用的时候,JVM貌似会整个卡死,这个服务器的其他java进程也全部卡死了,不到万不得已,对在线服务的应用正常情况下还是不要用它。[/color]
分享到:
相关推荐
JAVA内存溢出问题总结
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
java 内存溢出分析工具 CoreAnalyzer
Java内存溢出解决办法 加大Tomcat使用Jvm内存(转载) 注重版权 Caused by: java lang OutOfMemoryError: Java heap space 错误原因及解决方法
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
java 内存溢出分析工具 HeapAnalyzer
【Java面试题】Java内存溢出
java IBM websphere 内存溢出 javacore deapdump CPU内存分析工具
websphere 内存溢出 javacore分析工具jca456 分析javacore的好工具 分析javacore的好工具
完美解决java读取excel内存溢出问题,希望可以帮到大家
Java内存溢出解决办法,很普遍的问题,希望能有所帮助。
Java内存溢出的详细解决方案 Java内存溢出的详细解决方案
OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...
websphere 内存溢出 javacore分析工具jca401 分析javacore的好工具 分析javacore的好工具
内存溢出配置,内存溢出配置内存溢出配置内存溢出配置
主要为大家详细介绍了Android避免内存溢出Out of Memory方法汇总,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
uniapp项目体量过大时,打包H5会报错, - process out of memory 解决放案: 替换HBuildX内置\HBuilderX\plugins\node\node.exe版本 添加\HBuilderX\plugins\compile-node-sass\node_modules\node-sass-china\...
android bitmap outofMemory 用来解决android中常见的bitmap outOfMemory
Websphere Application Server WAS 内存溢出分析,帮助分析内存问题