zoukankan      html  css  js  c++  java
  • 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次数增多,内存没有有效释放。这是内存泄漏的明显迹象

    1. 查看系统日志

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

    2. 分析Heap Dump

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



    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
    

    扫一扫,关注我

  • 相关阅读:
    APIO2007 动物园
    SCOI2010 股票交易
    USACO13NOV No Change G
    洛谷 P3694 邦邦的大合唱站队
    洛谷 P6196 3月月赛 ERR1 代价
    洛谷月赛 ERR1 代价
    Splay 学习笔记
    HNOI2009 梦幻布丁
    乘法逆元
    【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
  • 原文地址:https://www.cnblogs.com/hally/p/13193986.html
Copyright © 2011-2022 走看看