1. 首页

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

JVM异常说明(超链接) 一文中已介绍了,JVM每个运行时区域——程序计数器 、Java虚拟机栈、本地方法栈、Java堆、方法区、直接内存发生OutOfMemoryError的不同原因和不同错误信息。
Java堆,是线程共享内存,几乎所有的对象实例以及数组都应在堆上分配。如下堆的内存泄漏错误也是我们常常遇到的


java.lang.OutOfMemoryError: Java heap space

工具VisualVM的介绍

使用VisualVM排查堆内存泄漏

  1. 查看GC

老年代Old和年轻代Eden区在不断增长,几乎已满。Full GC次数增多,内存没有有效释放。这是内存泄漏的明显迹象

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

  1. 查看系统日志
    > Js中文网 – 全球前端挚爱的技术成长平台 www.javascriptC.com
    > Javascript中文网是以前端进阶资源教程分享为主的专业网站,包括:前端教程、JavaScript资讯、大厂面试题、typescript教程、程序人生、React.js源码解读、Vue3.js技术揭秘等,以帮助开发者成长为愿景的社区

已有Full GC的日志,紧接着开始报错OutOfMemoryError 性能测试之JVM的故障排查-堆内存泄漏

  1. 分析Heap Dump

导入Dump后,可以看到占用内存最大的类和实例——OOMMonitor类中的placeholder变量

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

  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

扫一扫,关注我

作者:大道说说
链接:https://juejin.im/post/6886358904297832461

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:性能测试之JVM的故障排查-堆内存泄漏

链接:https://www.javascriptc.com/4708.html

« 滴滴开源的有趣项目有点意思了
导航定位向高精定位的演进与实践»
Flutter 中文教程资源

相关推荐

QR code