• JVM优化之jmap的使用以及内存溢出分析


    什么是jmap?

    jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节
    可以使用jmap生成Heap Dump。
    在Java命令Java Dump和Java命令:Jstack中分别有关于Java Dump以及线程 Dump的介绍。 
     
     
    查看内存使用情况
    首先使用idea启动一个Tomcat
    在使用 jps 查看该进程 pid
    jmap -heap  pid

     

     

    查看内存中对象数量及大小

    #查看所有对象,包括活跃以及非活跃的
    jmap -histo <pid> | more

    #查看活跃对象
    jmap -histo:live <pid> | more

     

    对象说明

    B: byte
    C:char
    D:double
    F: float
    I: int
    J :long
    Z :boolean
    '[' :数组,如:'[I':表示int[]
    '[L+':类名 其他对象

    将内存使用情况dump到文件中

    有些时候我们需要将jvm当前内存中的情况dump到文件中,然后对它进行分析,jmap也
    是支持dump到文件中的。

    #用法:
    jmap ‐dump:format=b,file=dumpFileName <pid>
    

      

     

     

    通过jhat对dump文件进行分析

    将jvm的内存dump到文件中,这个文件是一个二进制的文件,不方便查看,这时我们可以借助于jhat工具进行查看

    #用法:
    jhat ‐port <port> <file>
    

      

    在浏览器中进行查看

    在最下面有一个查询功能

     

    输入: select s from java.lang.String s where s.value.length >= 1000 (查询长度大于等于1000的字符串)

     

    结果会在左下角显示出来

    通过MAT工具对dump文件进行分析

    MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,

    它可以帮助我们查找内存泄漏和减少内存消耗。

    使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,

    并可以通过报表直观的查看到可能造成这种结果的对象。

    官网地址:https://www.eclipse.org/mat/

    下载与解压完成之后

     

     使用

     

     

     actions下面的

    Histogram:列出内存中的对象,对象的个数以及大小

    Dominator Tree:列出最大的对象以其依赖存活的对象

    点击Histogram进入查看内存中的对象,对象的个数以及大小

     

     点击Dominator Tree查看最大的对象以其依赖存活的对象

    点击default_report进行查看查看可能存在内存泄露的分析

     

     

     

  • 相关阅读:
    2014-04-23 总结
    14-5-13
    PHP
    14-5-8
    ajax
    14-5-6
    14-5-5
    PHP初解
    14-4-30
    14-4-29
  • 原文地址:https://www.cnblogs.com/wishsaber/p/12409056.html
Copyright © 2020-2023  润新知