先上图,下面是一个线程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相关推荐

  1. Dump文件:线程dump和堆dump

    2019独角兽企业重金招聘Python工程师标准>>> 一.线程dump 1.我最先使用的是线程dump,看线程是否有阻塞的,比如查看同步方法的: 2.线程dump是直接可以用edi ...

  2. JVM:如何分析线程堆栈

    英文原文:JVM: How to analyze Thread Dump 在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因.在我看来线程堆栈分析技术是Java EE产品 ...

  3. jmc线程转储_如何分析线程转储– IBM VM

    jmc线程转储 本文是我们的线程转储分析系列的第4部分,它将为您提供什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点的概述. 您将看到和学习​​到,IBM VM Thread Dump ...

  4. jvm线程分析命令_JVM:如何分析线程转储

    jvm线程分析命令 本文将教您如何分析JVM线程转储,并查明问题的根本原因. 以我的观点,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能. 您可以从线程转储快照中获取的信息量通常远远超 ...

  5. 如何分析线程转储– IBM VM

    本文是我们的线程转储分析系列的第4部分,它将为您概述什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点. 您将看到和学习​​到,IBM VM Thread Dump格式是不同的,但是提供 ...

  6. JVM:如何分析线程转储

    本文将教您如何分析JVM线程转储,并查明问题的根本原因. 从我的角度来看,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能. 您可以从线程转储快照中获取的信息量通常远远超出您的想象. 我 ...

  7. java dumpheap_java程序性能分析之thread dump和heap dump

    一.dump基本概念 在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题.这些文件记录了JVM运行期间的内存占用.线程执行等情况,这就是我们常说的 ...

  8. 将线程pid转成16进制_如何使用jstack分析线程状态

    背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高 ...

  9. 如何使用jstack分析线程状态

    转载自  如何使用jstack分析线程状态 背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直 ...

最新文章

  1. mysql --max_allowed_packet=32m,如何修改MySQL-max_allowed_packet
  2. 使用U盘安装Fedora14 32bit操作系统(参考自www.osyunwei.com)
  3. c语言实现万年历程序带节日,【C】万年历
  4. 网站站群相关工具001---WebPlus集群平台
  5. 从入门到入土:python爬虫|SCU每日打卡自动填写|测试训练|
  6. [Linux网络编程学习笔记]索引
  7. 图解形态学Morphological
  8. RTP发送h264文件,用vlc播放
  9. 《HTTP权威指南》读书笔记---HTTP概述
  10. payload sql注入_Web安全:SQL注入工具
  11. 对计算机数字不敏感怎么解决,英语听力对数字不敏感的解决办法
  12. 领域驱动设计营销系统建模
  13. Laragon 在Windows中快速搭建Laravel本地开发环境
  14. 项目应用案例:智慧灯杆、交互式投影装置等将助成都锦城大道变身“智慧大街”
  15. SVN教程 服务端/客户端
  16. PHP 运行方式详解
  17. Gulp——JS模块化说明视频-张晓飞-专题视频课程
  18. Editplus设置/修改默认字符集
  19. 安卓开发-Android系统起源
  20. tidb数据库隔离级别剖析

热门文章

  1. Python下进程同步之互斥锁、信号量、事件机制
  2. 堆排序算法(java实现)
  3. linux nohup的使用及详解
  4. 中科院大学计算机科学与技术王伟强,李振宇 - 中国科学院大学 - 计算机科学与技术学院...
  5. 建造者模式和桥接模式,答应我告别ifelse好吗?
  6. 【python-docx】长度单位(毫米、厘米、英尺、磅等)的表示和转换关系
  7. 自驾出游系列之(二): 自驾游应该了解的各地春节民俗
  8. 客户端与服务器的数据传输
  9. 转载一篇人生思考:一名大学毕业生的反思
  10. 地热井监测控制系统解决方案