【发布时间】:2021-11-15 14:32:52
【问题描述】:
我有一个 spring 批处理应用程序,它消耗约 16GB 内存和 75% 的 CPU(4 核 X2.5Ghz),有时它抛出内存不足异常。
我想优化堆分配和垃圾收集并尝试使用以下 JVM 选项来解决内存不足异常。
我无法理解其中一些参数,因为我直接从一篇文章中复制粘贴了
JAVA_OPTS="-server -Xmx20480m -Xms512m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=30 -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:ParallelCMSThreads=2 -XX:+UseCMSCompactAtFullCollection -XX:+DisableExplicitGC -XX: MaxHeapFreeRatio=70 -XX:MinHeapFreeRatio=40 -XX:MaxTenuringThreshold=0 -XX:NewSize=450m -XX:MaxNewSize=650m"
真的会优化堆分配和垃圾收集并解决内存不足异常吗?
【问题讨论】:
-
首先是分析一个java heap dump。特别是批次可能会膨胀,应该保持整洁。执行 SonarLint 以获得真正容易的维修,并执行 profiling 以解决结构瓶颈。更快的批次和更少的资源比人们想象的更重要。
-
drop
CMS,老了,没人支持,在jdk-14中被删除了。
标签: java spring jvm spring-batch heap-memory