【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被占满问题排查 资源

相关文章
相关标签/搜索