问题:
JVM内部内存正常,但总的RES爆了
结论用参数
HEAP_OPTS: -Xms1024M -Xmx4096M
JAVA_OPTS: -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:+UseG1GC -XX:MaxHeapFreeRatio=50 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
MALLOC_ARENA_MAX: 4
第一行:堆内存下限低,上限给到峰值即可
第二行: 给出合理的元数据内存限制,New:Old 1 增加GC量,关闭存活区自适应 使用G1GC -XX:MaxHeapFreeRatio=50使得内存快速释放
第三行:减少单个线程64MB块至4个
JDK8的RES回收策略(HotSpot):
JVM需要的总内存约等于=堆最小值(按Free比例)+元数据最大值+代码缓存,故必须控制这几个值加起来少于内存总量,稳妥来讲80%算适合(要给线程留内存)
在控制好这几块占总内存比例的情况下,RES回收正常