当前位置:网站首页 > 技术经理的晋升之路 > 正文

jvisualvm分析dump文件(jvm dump路径)



  • 1 一、Thread Dump介绍
  • 1.1 1.1什么是Thread Dump?
  • 1.2 1.2 Thread Dump特点
  • 1.3 1.3 Thread Dump 能诊断的问题
  • 1.4 1.4如何抓取Thread Dump
  • 2 二、java线程的状态转换介绍(为后续分析做准备)
  • 2.1 2.1 新建状态(New)
  • 2.2 2.2 就绪状态(Runnable)
  • 2.3 2.3 运行状态(Running)
  • 2.4 2.4 阻塞状态(Blocked)
  • 2.5 2.5 死亡状态(Dead)
  • 3 三、Thread Dump分析
  • 3.1 3.1 首先介绍一下Thread Dump信息的各个部分
  • 3.2 3.2 JVM线程介绍
  • 4 四、案例分析:
  • 4.1 4.1、使用方案
  • 5 heapdump
  • 5.1 什么是 Java heap dump
  • 5.2 触发 Java heap dump
  • 5.3 分析 Java heap dump

1.1什么是Thread Dump?

Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。

1.2 Thread Dump特点

1. 能在各种操作系统下使用 2. 能在各种Java应用服务器下使用 3. 可以在生产环境下使用而不影响系统的性能 4. 可以将问题直接定位到应用程序的代码行上

1.3 Thread Dump 能诊断的问题

1. 查找内存泄露,常见的是程序里load大量的数据到缓存; 2. 发现死锁线程;

1.4如何抓取Thread Dump

2.1 新建状态(New)

用new语句创建的线程处于新建状态,此时它和其他Java对象一样,仅仅在堆区中被分配了内存。

2.2 就绪状态(Runnable)

当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态,Java虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运行池中,等待获得CPU的使用权。

2.3 运行状态(Running)

处于这个状态的线程占用CPU,执行程序代码。只有处于就绪状态的线程才有机会转到运行状态。

2.4 阻塞状态(Blocked)

阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU。直到线程重新进入就绪状态,它才有机会转到运行状态。

阻塞状态可分为以下3种:

2.5 死亡状态(Dead)

当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。

通过前面1.4部分的方法,获取Thread Dump信息后,对其进行分析;

3.1 首先介绍一下Thread Dump信息的各个部分

2) 线程状态详解: Runnable _The thread is either running or ready to run when it gets its CPU turn._

3.2 JVM线程介绍

4.1、使用方案

cpu飙高,load高,响应很慢 方案: * 一个请求过程中多次dump * 对比多次dump文件的runnable线程,如果执行的方法有比较大变化,说明比较正常。如果在执行同一个方法,就有一些问题了。 查找占用cpu最多的线程信息 方案: * 使用命令: top -H -p pid(pid为被测系统的进程号),找到导致cpu高的线程id。 上述Top命令找到的线程id,对应着dump thread信息中线程的nid,只不过一个是十进制,一个是十六进制。 * 在thread dump中,根据top命令查找的线程id,查找对应的线程堆栈信息。 cpu使用率不高但是响应很慢 方案: * 进行dump,查看是否有很多thread struck在了i/o、数据库等地方,定位瓶颈原因。 请求无法响应 方案: * 多次dump,对比是否所有的runnable线程都一直在执行相同的方法,如果是的,恭喜你,锁住了!

什么是 Java heap dump

首先需要搞懂什么是java heap,java heap是分配给实例类和数组对象运行数据区,所有java线程在运行期间共享heap中的数据。Java heap dump相当于java应用在运行的时候在某个时间点上打了个快照(snapshot)。

触发 Java heap dump

有以下方法出发heap dump

使用$JAVA_HOME/bin/jmap -dump来触发,eg:jmap -dump:format=b,file=/home/longhao/heamdump.out 使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮。生成的dump文件在java应用的根目录下面。 在应用启动时配置相关的参数 -XX:+HeapDumpOnOutOfMemoryError,当应用抛出OutOfMemoryError时生成dump文件。 使用hprof。启动虚拟机加入-Xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。

分析 Java heap dump

1:使用IBM HeapAnalyzer

IBM HeapAnalyzer是一款免费的JVM内存堆的图形分析工具,它可以有效的列举堆的内存使用状况,帮助分析Java内存泄漏的原因。

2:jhat

3:Eclipse MemoryAnalyzer

Eclipse Memory Analyzer是一个快速并且功能强大的Java heap分析器,能够帮助你查找内存泄漏和减少内存消耗。在File>Acquire Heap Dump>configure>HPROF jmap dump provider设置一下分析应用的JDK,点击相关应用列表来生成heap dump并分析。

在socket,nio中的有些API中,申请的内存是直接想OS要的,在堆中分析内存是查看不到的,可以通过-XX:MaxDirectMemorySize=来设置应用向OS直接申请的最大内存数。

到此这篇jvisualvm分析dump文件(jvm dump路径)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 一级毕业论文的一级标题与二级标题之间必须要有过渡段落,二级标题与三级标题之间可以不用过渡段落。()二级毕业论文的一级标题与二级标题之间必须要有过渡段落,二级标题与三级标题之间可以不用过渡段落。()三级毕业论文的一级标题与二级标题之间必须要有过渡段落,二级标题与三级标题之间可以不用过渡段落。()例子(一级毕业论文的一级标题与二级标题之间必须要有过渡段落,二级标题与三级标题之间可以2025-07-29 08:54:04
  • 网页即时聊天(网页即时聊天陌路人)2025-07-29 08:54:04
  • 反激电路图(反激电路工作原理图)2025-07-29 08:54:04
  • max3221原理图(max3232电路)2025-07-29 08:54:04
  • ipv6回环地址(ipv6环路地址)2025-07-29 08:54:04
  • mt7811原理图(mt7811电路图原理)2025-07-29 08:54:04
  • 双管反激电路(双管反激电路占空比)2025-07-29 08:54:04
  • 华为模拟器路由器配置命令(华为模拟器路由器配置命令)2025-07-29 08:54:04
  • 电路gs是什么意思(电路分析中gs是什么)2025-07-29 08:54:04
  • 51单片机时钟电路原理(51单片机时钟电路原理图详解)2025-07-29 08:54:04
  • 全屏图片