JVM的堆内存泄漏排查-性能测试
2024-10-09 07:51:59
JVM异常说明 https://testerhome.com/articles/24259 一文中已介绍了,JVM每个运行时区域——程序计数器 、Java虚拟机栈、本地方法栈、Java堆、方法区、直接内存发生OutOfMemoryError的不同原因和不同错误信息。
Java堆,是线程共享内存,几乎所有的对象实例以及数组都应在堆上分配。如下堆的内存泄漏错误也是我们常常遇到的
java.lang.OutOfMemoryError: Java heap space
工具VisualVM的介绍
使用VisualVM排查堆内存泄漏
- 查看GC
老年代Old和年轻代Eden区在不断增长,几乎已满。Full GC次数增多,内存没有有效释放。这是内存泄漏的明显迹象
查看系统日志
已有Full GC的日志,紧接着开始报错OutOfMemoryError
分析Heap Dump
导入Dump后,可以看到占用内存最大的类和实例——OOMMonitor类中的placeholder变量
- 示例代码
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);
}
}
- 示例VM配置参数
-Xms20m
-Xmx20m
-verbose:gc
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/heapdump.hprof
扫一扫,关注我
最新文章
- selenium操作隐藏的元素
- linux command
- 微小企业中Sqlserver2000服务器的日常备份与恢复
- 谈谈JavaScript MVC模式
- 【Gym 100971A】Treasure Island
- 织梦DedeCMS首页调用单页文档内容的方法
- js树目录结构
- dotnet il editor 调试 iis 程序
- Java Web编程的主要组件技术——Hibernate入门
- C#当中的多线程_任务并行库(上)
- vs2013 使用vs调试器,发现调试器显示的数据错误。查看内存,发现内存是正确的。
- Flyweight 模式
- sql tran, c# SqlTransaction , TransactionScope 的用法
- html和html5学习
- [转载] TCP长连接与短连接的区别
- ASP.NET Aries 高级开发教程:使用存储过程(番外篇)
- 粉红色界面的vscode,程序媛的必备利器
- OCP 062考试题库2019年新出现的考题-17
- UVa 11134 Fabled Rooks (贪心+问题分解)
- Docker持久化存储与数据共享
热门文章
- 报错:The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
- PowerPC-object与elf中的符号引用
- Rocket - diplomacy - ValName
- java实现黄金分割数
- 逐行解读HashMap源码
- 手把手教你用redis实现一个简单的mq消息队列(java)
- QingStor 对象存储架构设计及最佳实践
- 实验五shell脚本编程
- 关于vue不能像angular深度克隆数据解决办法
- Photoshop 使用过程中遇到的问题