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

  • 相关阅读:
    CoreData学习-最好的一片文章
    Xcode4.6下添加百度地图ios版(BMapKit)详细教程(_BMKMapManager错误解决)
    NSSearchPathForDirectoriesInDomains用法
    编绎显示Unknown type name “CGFloat” 错误解决方法
    自动调整cell的高度
    sqlMapConfig约束
    PotPlayer左上角信息关闭
    松懈
    sql查询练习
    idea内容补充
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/10868562.html
Copyright © 2020-2023  润新知