java之jvm堆内存占用问题
jvm内存基本概况说明
获取jvm操作对象
Runtime runtime = Runtime.getRuntime();
- jvm申请内存
- jvm向os进行申请的内存空间
- runtime.totalMemory()
- jvm实际使用内存
- jvm当前时间使用的内存
- runtime.totalMemory() - runtime.freeMemory()
- jvm最大可申请内存
- 启动应用时设置-Xmx的最大堆内存的值
- runtime.maxMemory()
- jvm闲置内存
- jvm已申请的内存 - jvm实际使用的内存
- runtime.freeMemory()
jvm实际使用内存释放问题
- 对于导入任务(NAS+CSV+DB),无论JVM释放完成释放内存,手动释放内存
jvm申请内存释放问题
-
jdk信息
- 不同的jdk版本对于jvm的管理控制有差异
- 本次针对:jdk1.8
-
启动参数
-
垃圾回收机制
- 默认:Parallel GC,适合多cpu的服务器,
- 更改:G1(java9默认使用的是G1)
场景 G1 (Garbage First) Parallel GC 堆内存大小 大内存(>4GB),推荐 8GB 以上 中小内存(<4GB) 响应时间要求 高响应性(低延迟),如 Web 应用、API 服务 高吞吐量,如批处理、ETL、科学计算 CPU 核心数 多 CPU(>=4 核),充分利用并发标记能力 多 CPU 或单 CPU,依赖并行处理提升吞吐量 对象分配率 适合对象分配率高、生命周期短的场景 适合对象分配率稳定的场景 -
最小空闲比例
-XX:MineHeapFreeRatio
- 默认值:40
- 作用:当【jvm空闲内存/堆内存设置的最大内存】值低于XX:MineHeapFreeRatio 值的时候,jvm向操作系统申请相应的内存
- 举例:
- 堆内存最大设置为128G -Xmx128g,-XX:MineHeapFreeRatio=10(临界值12.8g)
- jvm里面的空闲内存如果为12.7g的时候,jvm会向os再申请相应的内存
-
最大空闲比例
-XX:MaxHeapFreeRatio
- 默认值:70
- 作用:当【jvm空闲内存/堆内存设置的最大内存】高低于XX:MineHeapFreeRatio 值的时候,jvm会将多余的内存归还给操作系统
- 举例:
- 堆内存最大设置为128G -Xmx128g,-XX:MaxHeapFreeRatio=30(临界值38.4g)
- jvm里面的空闲内容如果为38.5g,则操作系统会回收jvm中相应的内存
-
java -jar -XX:+UseG1GC -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -Xms8g -Xmx128g activity-exec.jar --spring.profiles.active=local
