JVM的堆内存泄漏排查-性能测试

JVM异常说明 https://testerhome.com/articles/24259 一文中已介绍了,JVM每个运行时区域——程序计数器 、Java虚拟机栈、本地方法栈、Java堆、方法区、直接内存发生OutOfMemoryError的不同原因和不同错误信息。

Java堆,是线程共享内存,几乎所有的对象实例以及数组都应在堆上分配。如下堆的内存泄漏错误也是我们常常遇到的

java.lang.OutOfMemoryError: Java heap space

工具VisualVM的介绍

使用VisualVM排查堆内存泄漏

  1. 查看GC

    老年代Old和年轻代Eden区在不断增长,几乎已满。Full GC次数增多,内存没有有效释放。这是内存泄漏的明显迹象

JVM的堆内存泄漏排查-性能测试

  1. 查看系统日志

    已有Full GC的日志,紧接着开始报错OutOfMemoryError

    JVM的堆内存泄漏排查-性能测试

  2. 分析Heap Dump

    导入Dump后,可以看到占用内存最大的类和实例——OOMMonitor类中的placeholder变量

JVM的堆内存泄漏排查-性能测试 JVM的堆内存泄漏排查-性能测试 JVM的堆内存泄漏排查-性能测试

  1. 示例代码
public class OOMMonitor {
    static class OOMobject {
        public byte[] placeholder = new byte[64 * 1024];
    }
    public static void fillHeap(int num) throws InterruptedException {
        List<OOMobject> list = new ArrayList<OOMobject>();
        for (int i = 0; i < num; i++) {
            //稍作延时,令监视曲线的变化更加明显
            Thread.sleep(500);
            list.add(new OOMobject());
            System.out.println("Hello World");
        }
    }
    public static void main(String[] args) throws Exception {
        fillHeap(1000);
    }
}
  1. 示例VM配置参数
-Xms20m
-Xmx20m
-verbose:gc
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/heapdump.hprof

扫一扫,关注我

JVM的堆内存泄漏排查-性能测试

原文 

http://www.cnblogs.com/hally/p/13193986.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » JVM的堆内存泄漏排查-性能测试

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址