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内存分析工具MAT(Memory Analyzer Tool) 可以解析内存的消耗,定位具体的类,定位问题
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