JVM堆内存释放不及时问题

简介: JVM堆内存释放不及时问题

线上问题:

1.线上每天定时读取文件(大文件)成MAP,并加载入库,当执行完最后一批 批量提交sql 时,JVM堆内存没释放;

2.因为加了以下堆内存检测,所以,下一次处理文件时,发起不了新的线程处理新任务;

public boolean exceedSize() {

MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();

LOGGER.info("堆内存信息: " + memoryBean.getHeapMemoryUsage());

return memoryBean.getHeapMemoryUsage().getUsed() / 1000 > heapSizeThreshold; // heapSizeThreshold = 3G

}

3.JVM参数配置:-Xms6144M -Xmx6144M -XX:+UseG1GC -XX:ParallelGCThreads=5 -XX:G1HeapRegionSize=32m -XX:G1ReservePercent=10 -XX:MaxGCPauseMillis=800

问题认识:

1.当线程处理完,堆内存没有触发释放的条件

2.之前看过的把xmx和xms设置一致可以让JVM在启动时就直接向OS申请xmx的commited内存,


好处是:

1)避免JVM在运行过程中向OS申请内存

2)延后启动后首次GC的发生时机

3)减少启动初期的GC次数

4)尽可能避免使用swap space

坏处:

堆内存释放不及时

解决方案:

第一、设置-Xms6144M -Xmx6144M参数为:-Xms1024M -Xmx6144M

第二、在发起线程前,检测堆内存时,Object obj = new Object(); // 触发垃圾回收

其他:

上线前,应尽可能准确估计上线情况,做压力测试,使用jdk自带的监控工具多做分析;上线后,不断迭代优化;可以考虑设置MaxHeapFreeRatio/MinHeapFreeRatio参数

相关文章
|
1天前
|
存储 缓存 算法
深入浅出JVM(十四)之内存溢出、泄漏与引用
深入浅出JVM(十四)之内存溢出、泄漏与引用
|
2天前
|
存储 缓存 算法
深入浅出JVM(二)之运行时数据区和内存溢出异常
深入浅出JVM(二)之运行时数据区和内存溢出异常
|
2天前
|
存储 缓存 Java
JVM 运行时内存篇
JVM 运行时内存篇
7 0
|
3天前
|
Arthas 监控 Java
JVM工作原理与实战(三十一):诊断内存泄漏的原因
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了诊断内存溢出的原因、MAT内存泄漏检测的原理等内容。
11 0
|
3天前
|
存储 Arthas 监控
JVM工作原理与实战(三十):堆内存状况的对比分析
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了堆内存状况的对比分析、产生内存溢出的原因等内容。
10 0
|
3天前
|
Arthas Prometheus 监控
JVM工作原理与实战(二十九):监控内存泄漏的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了解决内存溢出的步骤、Top命令、VisualVM、Arthas、Prometheus + Grafana等内容。
10 0
|
3天前
|
监控 Java 测试技术
JVM工作原理与实战(二十八):内存溢出和内存泄漏
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了内存溢出与内存泄漏、内存泄漏的常见场景、解决内存溢出的步骤等内容。
JVM工作原理与实战(二十八):内存溢出和内存泄漏
|
3天前
|
存储 监控 算法
JVM工作原理与实战(二十七):堆的垃圾回收-G1垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器、G1垃圾回收器的回收方式、G1垃圾回收器执行流程、垃圾回收器的选择等内容。
|
3天前
|
机器学习/深度学习 监控 算法
JVM工作原理与实战(二十六):堆的垃圾回收-垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收器、Serial垃圾回收器、SerialOld垃圾回收器、ParNew垃圾回收器、CMS垃圾回收器、Parallel Scavenge垃圾回收器、Parallel Old垃圾回收器等内容。
10 0
|
4天前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
18 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法