背景:
運維埋的一個坑,在該應用上只配置留-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情況