如何分析线程Dump和堆Dump
先上图,下面是一个线程Dump:
1、线程Dump的各种概念:
线程的状态:
- NEW:未启动,不会出现在Dump中
- RUNNABLE:在虚拟机中执行的
- BLOCKED:受阻塞并等待在监视器锁
- WAITTING:无限期等待另一个线程执行特定的操作
- TIMED_WAITTING:有时限的等候另一个线程执行特定的操作
- TERMINATED:已退出
什么是监视器:
面向对象锁控制访问这个锁的线程的一个线程。
调用修饰:
- locked <地址> 目标:注意临界区对象锁可重入,线程状态为RUNNABLE
- waitting to lock <地址> 目标:还没有获得锁,进入区等待,线程状态为BLOCKED
- waitting on <地址> 目标:获得锁了,等待区等待,线程状态为WAITTING,TIMED_WAITTING
- parking to wait for <地址> 目标:线程原语,随current包出现,与synchronized体系不同
线程动作
- runnable:线程状态为RUNNABLE
- in Object.wait():等待区等待,线程状态为WAITTING或TIMED_WAITTING
- waitting for monitor entry:进入区等待,线程状态为BLOCKED
- waitting on condition:等待区等待,被park
- sleeping:休眠的线程,调用了Thread.sleep()
2、分析线程Dump的入手点
1、进入区等待:BLOCKED、waitting to lock、waitting for monitor entry,这些词表名代码层面已经存在冲突。
2、持续进行的IO:一般来说被捕捉到的runnable的IO调用都是有问题的,如runnable中有JDBC链接的代码
3、非线程调度的等待区等待:in Object.wait()(情况1可能会导致这个情况,造成大量线程堆积)
3、“死锁”问题的解决办法
1、在最可能死锁的时间点制作Dump
2、找出引起大量线程阻塞的线程
3、找出该线程阻塞的原因
4、阅读代码,遍历其他阻塞或等待的线程,以及它之前的调用是否会造成这个线程的等待
4、注意
排除GC干扰,Full GC时所有线程都会被阻塞住,
- 查看线程Dump时,首先查看内存使用情况
- 使用命令“-verbose:gc”,观察是否有Full GC字样
5、什么情况下需要分析堆Dump
内存不足、GC异常、怀疑代码内存泄漏,这时需要制作堆Dump,找出生命周期的错误关联对象以及相关代码。
6、内存模型
年轻代(Young Generation,包括Eden space、From space、To space)
年老代(Old Generation)
永久代(PermGen space)
两种GC:
- YoungGen GC:Minor GC
- Full GC:Major GC
7、内存泄漏和内存溢出
- 内存泄漏:好比画画时把整个本都画满了,没地方画了。
一个对象持有一个引用永远不释放,导致声明周期过长,这样持有的对象多了,内存就不够用了,这样就会频繁GC - 内存溢出:画画时把一整页都画满了,都画到桌子上了。
8、常见错误
- out of MemoryError:GC overhead limit exceed
回收时间占系统运行时间的98%以上,极有可能是内存泄漏导致的。
如何分析线程Dump和堆Dump相关推荐
- Dump文件:线程dump和堆dump
2019独角兽企业重金招聘Python工程师标准>>> 一.线程dump 1.我最先使用的是线程dump,看线程是否有阻塞的,比如查看同步方法的: 2.线程dump是直接可以用edi ...
- JVM:如何分析线程堆栈
英文原文:JVM: How to analyze Thread Dump 在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因.在我看来线程堆栈分析技术是Java EE产品 ...
- jmc线程转储_如何分析线程转储– IBM VM
jmc线程转储 本文是我们的线程转储分析系列的第4部分,它将为您提供什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点的概述. 您将看到和学习到,IBM VM Thread Dump ...
- jvm线程分析命令_JVM:如何分析线程转储
jvm线程分析命令 本文将教您如何分析JVM线程转储,并查明问题的根本原因. 以我的观点,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能. 您可以从线程转储快照中获取的信息量通常远远超 ...
- 如何分析线程转储– IBM VM
本文是我们的线程转储分析系列的第4部分,它将为您概述什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点. 您将看到和学习到,IBM VM Thread Dump格式是不同的,但是提供 ...
- JVM:如何分析线程转储
本文将教您如何分析JVM线程转储,并查明问题的根本原因. 从我的角度来看,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能. 您可以从线程转储快照中获取的信息量通常远远超出您的想象. 我 ...
- java dumpheap_java程序性能分析之thread dump和heap dump
一.dump基本概念 在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题.这些文件记录了JVM运行期间的内存占用.线程执行等情况,这就是我们常说的 ...
- 将线程pid转成16进制_如何使用jstack分析线程状态
背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高 ...
- 如何使用jstack分析线程状态
转载自 如何使用jstack分析线程状态 背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直 ...
最新文章
- mysql --max_allowed_packet=32m,如何修改MySQL-max_allowed_packet
- 使用U盘安装Fedora14 32bit操作系统(参考自www.osyunwei.com)
- c语言实现万年历程序带节日,【C】万年历
- 网站站群相关工具001---WebPlus集群平台
- 从入门到入土:python爬虫|SCU每日打卡自动填写|测试训练|
- [Linux网络编程学习笔记]索引
- 图解形态学Morphological
- RTP发送h264文件,用vlc播放
- 《HTTP权威指南》读书笔记---HTTP概述
- payload sql注入_Web安全:SQL注入工具
- 对计算机数字不敏感怎么解决,英语听力对数字不敏感的解决办法
- 领域驱动设计营销系统建模
- Laragon 在Windows中快速搭建Laravel本地开发环境
- 项目应用案例:智慧灯杆、交互式投影装置等将助成都锦城大道变身“智慧大街”
- SVN教程 服务端/客户端
- PHP 运行方式详解
- Gulp——JS模块化说明视频-张晓飞-专题视频课程
- Editplus设置/修改默认字符集
- 安卓开发-Android系统起源
- tidb数据库隔离级别剖析