【JVM】內存和SWAP問題


一、現象

1、系統穩定運行,偶爾發生響應超時的情況。查看下游依賴服務和數據庫狀態都良好。超時完全是由於服務本身問題造成的。重啟不能解決問題,一直會間隔性的發生超時

二、原因分析

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

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

第三種情況,  物理內存不夠用, 大量JVM的堆內存被交換到SWAP后,垃圾回收時,把SWAP內存換回物理內存,但SWAP的內存又不會立即回, 此時可以觀察到垃圾回收同時swap使用的內存會變大(其它部分內存要交換到SWAP里)

第四種情況,進程因為內存問題而被系統殺掉。開啟SWAP分區,可以有效防止進程因為內存問題而被系統殺掉

三、解決方案

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

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

2、系統內存不夠,把JVM堆部分用到了SWAP,導致每次GC的時間變得很久

  • 增大系統內存,但是有最大物理內存的限制。一般每個虛擬機的系統內存是固定分配的
  • 分析導致占用內存過大的原因,進行程序優化

3、物理內存不夠用

  • 增大物理內存。
  • 分析導致占用內存過大的原因,進行程序優化。或進行服務的拆分

四、具體案例

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

【JVM】jdk1.8-jetty-swap被占滿問題排查 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM