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
    

    扫一扫,关注我

  • 相关阅读:
    vue项目实现路由按需加载
    常用的meta标签
    聊聊https
    Centos 7 忘记root密码修改方法
    find常用命令
    linux上的mysql忘记密码
    kaill 安装zenmap软件
    selenium.common.exceptions.WebDriverException: Message: 'chromedriver'解决
    centos7 开机执行脚本或者命令
    Linux下载常用命令
  • 原文地址:https://www.cnblogs.com/hally/p/13859062.html
Copyright © 2011-2022 走看看