JVM的堆内存泄漏排查-性能测试

发表于:2020-7-16 11:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:老僧观天下    来源:博客园

  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次数增多,内存没有有效释放。这是内存泄漏的明显迹象
  2.查看系统日志
  已有Full GC的日志,紧接着开始报错OutOfMemoryError
  3.分析Heap Dump
  导入Dump后,可以看到占用内存最大的类和实例——OOMMonitor类中的placeholder变量

  4.示例代码
   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);
  }
  }
  5.示例VM配置参数
   -Xms20m
  -Xmx20m
  -verbose:gc
  -XX:+PrintGCDetails
  -XX:+HeapDumpOnOutOfMemoryError
  -XX:HeapDumpPath=/data/heapdump.hprof

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号