背景:
运维埋的一个坑,在该应用上只配置留-Xmx,没有配置-Xms。
表象:
堆内存从0.2G开始,最大到0.8G,就开始执行GC,导致频繁GC,大致间隔1分钟/次。从下图左侧即可看到。
解决:
增加-Xms重新发版本,堆内存、GC间隔明显看着好多了。
原因:
-Xms为应用初始化部署的时候,向操作系统申请多少内存。如果不设置-Xms后,应用只会申请一小部分的内存,当堆内存使用达到峰值,会进行GC而不会重新申请。当应用运行一段时间,堆内存最低水位会逐渐抬高。例如该监控图,一开始最低水位在0.2G,现在到达0.4G。当最低水位一直抬高,应用才会向操作系统申请扩容内存使用。直到到达-Xmx设置阀值。
结论:
当只配置-Xmx,不配置-Xms,会造成频繁GC,影响机器性能,但不会造成OOM。
改造:
修正后,堆内存清理现象明显,GC频率降低。
堆内存使用情况
gc情况