码迷,mamicode.com
首页 > 其他好文 > 详细

3,heap dump和thread dump 分析

时间:2020-11-24 12:19:42      阅读:8      评论:0      收藏:0      [点我收藏+]

标签:堆内存   pid   切换   map   增加   分析   网页   性能分析   grep   

一:heap dump
1、heapdump:记录内存信息的,heap dump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况,
            heapdump文件是指定时刻的Java堆栈的快照,是一种镜像文件。

2、产生heapdump(内存溢出)错误原因一般出于以下原因:
            1)JVM内存过小。
            2)程序不严密。
            3)产生过多的垃圾无法回收。

3、heapdump文件如何生成?
            使用 jmap 命令生成:
                       jmap 命令是JDK提供的用于生成堆内存信息的工具,切换到JDK_HOME/bin目录下后,执行下面的命令生成Heap
            linux环境:
                       ./jmap -dump:live,format=b,file=heap.hprof <pid>
                       其中pid是JVM进程的id,heap.hprof是生成的heap dump文件,在执行命令的目录下面。推荐此种方法。

            如果我们只需要将dump中存活的对象导出,那么可以使用:live参数
                       jmap -dump:live,format=b,file=heapLive.hprof 2576 

4、常见heapdump文件分析工具:jhat
        jhat 是JDK自带的用于分析JVM Heap Dump文件的工具,使用下面的命令可以将堆文件的分析结果以HTML网页的形式进行展示:
        jhat <heap-dump-file>
        其中 heap-dump-file 是文件的路径和文件名,可以使用 -J-Xmx512m 参数设置命令的内存大小。执行成功之后显示如下结果:
  	这个时候访问 http://localhost:7000/ 即可以看到结果了。

    考虑到生产环境中几乎不可能在线对其进行分析,大都是采用离线分析,因此使用jmap+MAT工具最常见最科学的组合。

           

二:thread dump
1、threaddump:记录CPU信息。
    thread dump文件主要保存的是java应用中各线程在某一时刻的运行的位置,即执行到哪一个类的哪一个方法哪一个行上。
    thread dump是一个文本文件,打开后可以看到每一个线程的执行栈,以stacktrace的方式显示。
    通过对thread dump的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,如数据库查询,长期得不到响应,最终导致系统崩溃。
    单个的thread dump文件一般来说是没有什么用处的,因为它只是记录了某一个绝对时间点的情况。
    比较有用的是,线程在一个时间段内的执行情况。

2、获取thread dump文件
    linux下执行:./jstack 2576 > thread.txt
    linux则会将命令执行结果转储到thread.txt,这就是thread dump文件。
		有了dump文件后,我们就能借助性能分析工具获取dump文件中的信息。

 

3、发现pid 4430 4431 4432 4433 线程分别占用了约40%的cpu,将这几个pid转为16进制,分别为114e 114f 1150 1151
    查询(pid转为16进制)中对应的线程情况(cat 1.txt|grep 114f)。

三:

    在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放内存。
    导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放。内存管理中的内存泄漏产生的主要原因:保留下来却永远不再使用的对象引用。
    一般说来,一个正常的系统在其运行稳定后其内存的占用量是基本稳定的,不应该是无限制的增长的。
    在应用程序中出现了OutOfMemoryError。在这种情况下,需要使用一些开销较低的工具来监控和查找内存泄漏。
    虽然OutOfMemoryError也有可能应用程序确实正在使用这么多的内存;对于这种情况则可以增加JVM可用的堆的数量,或者对应用程序进行某种更改,使它使用较少的内存。
           
           
           

3,heap dump和thread dump 分析

标签:堆内存   pid   切换   map   增加   分析   网页   性能分析   grep   

原文地址:https://www.cnblogs.com/k8s-pod/p/13974379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!