【JVM】內存和SWAP問題

1、現象

一、系統穩定運行,偶爾發生響應超時的狀況。查看下游依賴服務和數據庫狀態都良好。超時徹底是因爲服務自己問題形成的。重啓不能解決問題,一直會間隔性的發生超時html

2、緣由分析

第一種狀況,系統內存夠用(JVM內存未使用到SWAP內存),但JVM內存不夠,最終致使JVM的頻繁垃圾回收(FGC),嚴重影響性能 (stop the word)數據庫

第二種狀況,系統內存不夠,把JVM堆部分用到了SWAP,那麼此時的垃圾回收須要把SWAP的內存換回到系統物理內存再進行JVM的垃圾回收。最大影響,致使每次GC的時間變得好久post

第三種狀況,  物理內存不夠用, 大量JVM的堆內存被交換到SWAP後,垃圾回收時,把SWAP內存換回物理內存,但SWAP的內存又不會當即回, 此時能夠觀察到垃圾回收同時swap使用的內存會變大(其它部份內存要交換到SWAP裏)性能

第四種狀況,進程由於內存問題而被系統殺掉。開啓SWAP分區,能夠有效防止進程由於內存問題而被系統殺掉優化

3、解決方案

一、系統內存夠用(JVM內存未使用到SWAP內存),但JVM內存不夠,致使JVM的頻繁GChtm

  • 增大JVM內存,但有可能致使第二種狀況的問題出現
  • 若是機器資源充足,建議把影響的業務獨立拆分,分開部署
  • 若是機器資源不是很充足,只能進行代碼的優化了

二、系統內存不夠,把JVM堆部分用到了SWAP,致使每次GC的時間變得好久blog

  • 增大系統內存,可是有最大物理內存的限制。通常每一個虛擬機的系統內存是固定分配的
  • 分析致使佔用內存過大的緣由,進行程序優化

三、物理內存不夠用進程

  • 增大物理內存。
  • 分析致使佔用內存過大的緣由,進行程序優化。或進行服務的拆分

4、具體案例

記錄一次線上SWAP偏高告警的故障分析過程 內存

【JVM】jdk1.8-jetty-swap被佔滿問題排查 資源

相關文章
相關標籤/搜索