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.查看系统日志

    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

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    定位,标记,Socket通信传输位置
    多维数组的下标存取
    ufunc函数
    八大排序算法
    揭开Python科学计算的面纱
    【python51--__name__属性】
    【Python48--魔法方法:迭代器&生成器】
    【Python047-魔法方法:定制序列】
    【MonkeyRunner环境搭建】
    【Python046--魔法方法:描述符】
  • 原文地址:https://www.cnblogs.com/jijm123/p/15662100.html
Copyright © 2011-2022 走看看