实战JAVA虚拟机 JVM故障诊断与性能优化(七)

分析Java堆

1.对症下药:找到内存溢出的原因

  内存溢出(OutofMemory,简称OOM),主要讨论最常见的集中内存溢出问题,包括堆溢出、直接内存溢出、永久区溢出等。

堆溢出

  当对象大小之和大于由Xmx参数指定的堆空间大小时,会造成溢出。

直接内存溢出

  在java的NIO(new IO)中,支持直接内存的使用,获取堆外的内存,这块内存是直接向操作系统申请的。

过多线程导致OOM

  由于线程的栈空间也是堆外的分配的。

永久区溢出

  存放类元数据的区域,如果一个系统定义太多的类,那么永久区会溢出。但在jdk1.8中,永久区被一块称为元数据区域取代,但是功能是类似的,都是为了保存类的元信息。

虚拟机内窥镜:使用MAT分析Java堆

1、MAT是什么?

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

2.为什么使用MAT?
    当服务器应用占用了过多内存的时候,会遇到OutOfMemoryError。如何快速定位问题呢?Eclipse MAT的出现使这个问题变得非常简单。它能够离线分析dump的文件数据。
    Eclipse MAT是SAP公司贡献的一个工具,可以在Eclipse网站下载到它,完全免费的。它可比Sun提供的内存镜像分析工具jhat要强太多了。
3.地址
首页:http://www.eclipse.org/mat/
插件更新地址:
http://download.eclipse.org/mat/1.0/update-site/

注意:可以使用jmap命令,生成堆的快照,使用发放:http://www.cnblogs.com/kaishi/p/7515216.html

File ---> acquire Heap Dump  打开正在运行的程序,或者打开dump文件

查看内存使用情况:

查看类柱状图

查看引用关系:

  通过MAT可以找到引用当前对象的对象,即入引用 with incoming references,已经当前对象引用的对象,即出引用。

浅堆和深堆 

  浅堆(Shallow Heap)和深堆(Retained Heap)是两个非常重要的概念,分别表示一个对象结构占内存的大小和一个对象被GC回收后,可以真实释放的内存大小。

Tomcat堆溢出分析

  思想:分析Dump文件,选择占堆内存较大的区块,进行引用跟踪,找到频繁出现的堆内存中的对象

  

时间: 2024-10-22 00:41:56

实战JAVA虚拟机 JVM故障诊断与性能优化(七)的相关文章

书籍推荐:《实战Java虚拟机——JVM故障诊断与性能优化》下载

本书详细介绍Java虚拟机的基本原理和优化诊断方法.其中重点介绍Java虚拟机的体系结构.常用的虚拟机参数.Java虚拟机的垃圾回收原理.算法以及目前虚拟机所支持的各种垃圾回收器及其区别.特点和使用方法.在实践和调优方面,重点介绍了Java的堆.栈分析方法,性能调优的一般思路.手段和工具.此外,还详细介绍了虚拟机内有关"锁"的实现以及优化方法. 作为对虚拟机的深入了解,本书还将详细介绍Java类的基本格式.装载过程和虚拟机的执行机制. Java虚拟机目前是Java.Scala.Cloj

实战JAVA虚拟机 JVM故障诊断与性能优化(五)---->常用的GC参数

实战Java虚拟机之四:提升性能,禁用System.gc() ?

今天开始实战Java虚拟机之四:"禁用System.gc()". 总计有5个系列 实战Java虚拟机之一"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之三"G1的新生代GC" 实战Java虚拟机之四"禁用System.gc()" 实战Java虚拟机之五"开启JIT编译" 默认情况下,System.gc()会显式直接触发Full GC,同时对老年代和新生代进

实战Java虚拟机之中的一个“堆溢出处理”

从今天開始.我会发5个关于java虚拟机的小系列: 实战Java虚拟机之中的一个"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之三"G1的新生代GC" 实战Java虚拟机之四"禁用System.gc()" 实战Java虚拟机之五"开启JIT编译" 以下说说[实战Java虚拟机之中的一个"堆溢出处理"] 在Java程序的执行过程中,假设堆空间不足.则有可能抛

实战Java虚拟机之一“堆溢出处理”

从今天开始,我会发5个关于java虚拟机的小系列: 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之四“禁用System.gc()” 实战Java虚拟机之五“开启JIT编译” 下面说说[实战Java虚拟机之一“堆溢出处理”] 在Java程序的运行过程中,如果堆空间不足,则有可能抛出内存溢出错误(Out Of Memory),简称为OOM.如下文字显示了典型的堆内存溢出: Exception in t

实战Java虚拟机之二“虚拟机的工作模式”

今天开始实战Java虚拟机之二:"虚拟机的工作模式". 总计有5个系列 实战Java虚拟机之一"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之三"G1的新生代GC" 实战Java虚拟机之四"禁用System.gc()" 实战Java虚拟机之五"开启JIT编译" 目前的Java虚拟机支持Client和Server两种运行模式.使用参数-client可以指定使

JVM虚拟机详解+Tomcat性能优化

1.JVM(java virtual mechinal) (1)JVM有完善的硬件架构,如处理器.堆栈.寄存器当,还具有相应的指令系统. (2)JVM的主要工作时解释自己的指令集(即字节码),并映射到本地的cpu的指令集或OS系统调用. 2.JVM虚拟机主要有堆.栈.本地方法栈.方法区组成 注:(1)堆和栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除. (2)在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护端点和现场. (3)堆.队列,先进先

《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了

#京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此一天,错过再等一年!!! !!仅此一天,赶紧下单! 作者在群里随时给大家解决问题!!!QQ群397196583

Java虚拟机11:运行期优化

前言 http://www.cnblogs.com/xrq730/p/4839245.html,HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已.当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发.实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了. 编译对象与触发条件 之前讲过,Sun使用的虚拟机之所以被叫做"HotSpot",就是因为运行过程中会检测热点代码,那么运行过程中,会被