zoukankan      html  css  js  c++  java
  • 【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被占满问题排查 

  • 相关阅读:
    文件编码转换
    mysql密码的奇怪问题
    python文件读写
    python中JSON的使用
    mysql默认字符编码的修改
    烧写uboot与linux操作系统,安装Samba,jlink驱动安装
    Busybox是什么?
    ubuntu 搭建GTK+以及glade2集成开发环境的一些方法
    Ubuntu linux安装ssh server
    UBoot启动过程(国嵌)
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/10868562.html
Copyright © 2011-2022 走看看