JVM调优—线程栈(JavaCore)和堆栈(HeapDump)分析

一、Java Core

JavaCore 也可以称为“threaddump”或是“javadump”

Javacore文件通常以*.txt方式显示,名称格式主要是以Javacore为头,加上日期号、产生的时间号、当时的线程编号

主要保存的是Java应用各线程在某一时刻的运行的位置,即JVM执行到哪一个类、哪一个方法、哪一个行上。它是一个文本文件,打开后可以看到每一个线程的执行栈和执行状态,以stack trace的显示。 Javacore 中除了线程信息外,还能提供关于操作系统,应用程序环境,线程,程序调用栈,锁,监视器和内存使用等相关信息

通过对JavaCore文件的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,例如数据库查询,长期得不到响应,最终导致系统崩溃等情况。

Javacore 中的线程状态:

  • 死锁(Deadlock)
  • 执行中(Runnable)
  • 等待资源(Waiting on condition)
  • 等待监控器检查资源(Waiting on monitor)
  • 暂停(Suspended)
  • 对象等待中(Object.wait())
  • 阻塞(Blocked)
  • 停止(Parked)
Java Core文件生成方法

step 1 :ps -ef | grep java 查看进程ID
step 2:在linux 系统中 使用 kill -3 pid,会在应用程序的概要文件的目录下生成一个javacore 文件

一般是找运维帮忙生成该文件

工具

IBM官网下载JCA工具,使用工具分析比较方便

二、Heap Dump

HeapDump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,这种文件需要相应的工具进行分析。如IBM Heap Analyzer这类工具。这类文件最重要的作用就是分析系统中是否存在内存溢出的情况。

Heap Dump生成方法

1)使用 jmap 命令生成

jmap -dump:live,format=b,file=heap-dump.bin <pid>

其中的pid是JVM进程的id,heap-dump.bin是生成的文件名称,在执行命令的目录下面

2)使用 JConsole 生成
JConsole是JDK提供的一个基于GUI查看JVM系统信息的工具,既可以管理本地的JVM,也可以管理远程的JVM,可以通过下图的 dumpHeap 按钮生成 Heap Dump文件。

3)JVM中增加参数
没用过,好像不建议使用

分析工具

1)jhat
JDK自带的分析工具

jhat <heap-dump-file>

heap-dump-file 是文件的路径和文件名,分析结果以HTML网页的形式进行展示,
访问http://localhost:7000/就可以看到结果

2)IBM Heap Analyzer

三、使用idea本地分析

查看线程Dump方法:

Debug的时候点击上图,可以查看线程执行状态

查看Heap Dump:

如图,方法执行时输入-xx:PrintGCDetails,就可以看到详细的堆内存信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值