zoukankan      html  css  js  c++  java
  • OOM排查

    1.一段会导致OOM的代码

    Java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间可达性路径来避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆容量限制后产生内存溢出异常

    import java.util.ArrayList;
    import java.util.List;
    
    public class OOMTest {
        public static void main(String[] args) {
            int i=0;
            try {
                String s="hello";
                List<String> list=new ArrayList<String>();
                while(true){
                    list.add(s);
                    s=s+s;
                    i++;
                }
            }catch (Throwable e){
                e.printStackTrace();
                System.out.println(i);
            }
        }
    }

    2.排查过程

    1. javac OOMTest.java

    说明:编译出class文件

    2. java -Xmx102m -Xms102m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:/memory.hprof OOMTest

    说明:

     -Xmx102m -Xms102m 设置堆内存最大值,最小值为102m

    -XX:+HeapDumpOnOutOfMemoryError 就是当你发生OOM时导出你的堆快照信息

    -XX:HeapDumpPath 设置导出的路径

    3. jvisualvm

    这个可以在你的命令行里敲也可以在你的Jdk包下找

     打开我们的VisualVM

    装入我们的hprof文件,就可以看到对应信息了

     

     

     这里就可以看到我们的String占的比例很大

     List中也全是String的数据,再个根据出错的行数,不难判断哪里出现了问题

     

     总结:

    1.dump出我们的堆的快照信息

    2.利用JVisualVM来进行判断哪里出了问题

  • 相关阅读:
    NABCD项目分析
    第七周学习进度
    第六周学习进度
    构建之法阅读笔记03
    [算法] 求x的n次方的一种for循环实现
    [算法]分解质因数
    通过索引操作数组
    [swift入门] 数据类型
    二叉排序树 常用函数小结
    剑指 Offer 54. 二叉搜索树的第k大节点 做题小结
  • 原文地址:https://www.cnblogs.com/dmzna/p/12934640.html
Copyright © 2011-2022 走看看