zoukankan      html  css  js  c++  java
  • 性能测试之JVM的故障排查-堆内存泄漏

    JVM异常说明(超链接) 一文中已介绍了,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
    

    扫一扫,关注我

  • 相关阅读:
    C# winform中读取HTML代码
    C#获取参数getParameter
    C# checkboxlist的使用
    win7任务栏只显示日期不显示年月日
    做事要仔细
    JSP显示不完全问题
    C# tabconctrol切换事件
    C#中combobox不可编辑与不可选择
    根据单选框改变的文本框
    JS判断form内所有表单是否为空
  • 原文地址:https://www.cnblogs.com/hally/p/13859062.html
Copyright © 2011-2022 走看看