MQ 服务占用 CPU 太高

文章目录

  • MQ 服务占用 CPU 太高
    • 1. 出现问题
    • 2. 分析过程
      • 1. 通过日志定位问题服务
      • 2. 查询异常服务进程、CPU、内存、IO、锁和网络
      • 3. CPU 占用过高分析
    • 3. 解决方案

MQ 服务占用 CPU 太高

1. 出现问题

  • 测试环境中,匹配业务运行时会出现响应缓慢或超时失败的情况

2. 分析过程

1. 通过日志定位问题服务

  • 根据匹配业务查询日志,发现查询房间信息的 Redis 缓存为空时会超时,这可能是由于缓存未被添加或中途被删除所致
    • 多次新开房间测试,缓存添加正常,排除添加缓存业务问题
    • 删除缓存的业务:
      • 前端关闭或 IM 端通知关闭:日志正常,排除
      • 心跳两次未更新(定时检测):一系列业务操作后、发布到 RabbitMQ 异步更新,RabbitMQ 服务的日志显示更新缓慢,更新不及时导致定时检测误判异常并删除缓存
  • 确定异常服务为 RabbitMQ 服务

2. 查询异常服务进程、CPU、内存、IO、锁和网络

  • 直接查询 RabbitMQ 的服务进程未发现问题:ps -ef | grep 'rabbitmq'

  • 使用 top 然后按 P 命令,然后使用cat /proc/cpuinfo| grep "processor"| wc -l查到机器是 32 核,CPU 负载不高:10 / 32 = 0.3125

  • 但是 RabbitMQ 的业务处理服务 rabbitmq 占用比较高:117.3%(90 - 300 % 之间)

  • free -m:内存还有 5315M 空闲

  • df -l:磁盘占用很高 89%(同时还在涨)
    MQ 服务占用 CPU 太高_第1张图片

  • 阿里云流量监控未发现服务器流量异常

  • 使用 jstack、jmap、jstat 命令,在 /home/webadmin 目录下查 JVM dump 日志,JVM 内存状态正常,非 GC 原因

  • 因此问题就是

    • RabbitMQ 占用 CPU 太高
    • 磁盘占用太高

3. CPU 占用过高分析

  • 进入 rabbitmq 消息存储目录,发现该目录占用磁盘过高,猜测磁盘占用过高导致 IO 读取异常
  • 尝试清理磁盘无用数据后,速度明显变快,但不久后磁盘再次快速增长
  • 问题所在:找到磁盘占用过多的服务

3. 解决方案

  • 首先使用 root 权限,进入根目录查询大文件:du -sh * \ --exclude="proc" \ --exclude="data*" | grep G,未找到
  • 然后查询隐藏文件:du -sh .[!.]*
  • 发现其他项目组的Android包放在此目录,占用空间巨大
  • 沟通后将包打包至其他位置,同时删除Android包,磁盘占用恢复正常

你可能感兴趣的:(解决真实问题,java,开发语言,bug)