线上事故处理记录

线上事故处理记录

一、MySQL 导致的服务器 CPU 飙升

有一天,突然收到了服务器 CPU 飙升的告警信息,打开普罗米修斯查看 CPU 的使用情况,发现 CPU 确实飙升了,下面开始去进行问题定位了。 1. 首先连接到对应的服务器,然后执行

sh 复制代码
top

查看导致 CPU 飙升的进程是什么,发现是 mysqld 进程导致的

  1. 进入 MySQL 服务器中,执行下面的命令
sh 复制代码
show processlist

补充: show processlist 命令的主要用途

  1. 查看当前有哪些客户端连接
  2. 查看当前执行的 SQL 语句,能看到慢 SQL、长时间阻塞的查询等
  3. 排查锁等待、死锁等问题,发现"Locked"的状态,表示线程在等待锁
  4. 排查连接数过多问题,判断是否有连接未正确释放或连接池配置不当

其实,此时通过查看结果,我基本可以确认是慢 SQL 导致的问题了,但是我还不能那么 100%确认,为了保险起见,我是这么处理的,我先将对应的 SQL 粘出来,然后使用 kill 命令将对应的线程杀死,来判断是不是因为这个查询 sql 导致的 CPU 飙升,结果发现确实 kill 之后,CPU 有所下降,那么说明这个 sql 肯定性能很差,先不说别的,这个 SQL 肯定要先优化一下

  1. 使用 explain 去分析这个 sql
sql 复制代码
# 举个例子而已,不是真实的sql,不要较真偶
explain select xxx from table where code='xxx';

发现这个 SQL 没有使用索引,于是我去表中查看了一下表结构,发现确实在 code 这个字段上是没有索引的,于是给这个 code 增加了一个唯一索引,重新 explain 分析这个 SQL,发现效果大大提高

  1. 正当我认为这个问题被我处理完之后,没想到过了几分钟,又出现问题了,出现了大量请求超时问题,接着分析,发现是开启了慢日志查询,有很多 SQL 超过了设置的慢查询阈值。于是我将慢日志查询关闭,CPU 又有所下降,但是发现还不是特别理想。
  2. 接下来怎么做呢?我是这么想的,在 MySQL 这层我已经做了优化了,剩下的只能去看代码逻辑了,看看他是如何处理的,然后我就去扒代码,结果发现没有使用缓存,所有的查询都是直接走的 DB,所以我增加了 Redis 缓存层,重新发布后,发现 CPU 确实稳定下来了,也没有再进行飙升。

补充:

在最后再补充一下,有时候 MySQL 层出现问题可能是由于大量的连接导致的,这个时候就要分析为什么有大量的连接同时过来,以及设置一个比较合理的连接数。

本次事故总结: 本次事故是因为没有做好数据库评审,由于开发人员没有建立索引导致慢 SQL 的出现;以及所有查询都走 DB 没有使用缓存层导致 MySQL 压力大。

二、Java 进程导致 CPU 飙升

依然是先收到了 CPU 超载的告警信息,然后去普罗米修斯上看了一下,CPU 一直持续在高负荷,然后我进到对应的服务器中。

  1. 首先执行 top 命令

    sh 复制代码
    top

    查看导致 CPU 飙升的进程是什么,发现是对应的 Java 进程导致的 CPU 飙升

  2. 执行

    sh 复制代码
    top -Hp PID

    来查看对应的 Java 进程中的线程的资源占用情况,发现有多个线程 CPU 的利用率达到了 99.9%

  3. 将堆栈信息导出来

    sh 复制代码
    jstack -l 进程ID >/jstack_result.txt

4.堆栈信息导出来了,那么多内容如何快速定位到出现问题的线程代码呢,那么需要将第 2 步得到的线程 PID 转成对应的 16 进制

bash 复制代码
printf "%xn" PID

然后在堆栈信息中搜索 记得前面可以加一个 0x 开头

这样就可以定位到具体的代码行数了,你就可以去到代码里面看看是什么问题了

在这里我通过定位发现了一直在空循环,所以导致 CPU 飙升。 gggg...

本次问题总结:代码评审没做到位!!!

相关推荐
视频技术分享5 分钟前
远程会诊产品设计复盘:音视频架构拆解与四大避坑
架构·音视频
程序猿乐锅15 分钟前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Flynn Liang42 分钟前
Spring AI 上生产:限流熔断、密钥与成本治理、私有化/混合部署、降级与 Prompt 灰度架构全解
人工智能·spring·架构·高可用·springai·成本治理·生产架构
夜雪一千1 小时前
Qwen3.8-Flash-Next 详细介绍:Qwen4架构先行版,125B总参、6B激活的稀疏MoE多模态模型
架构
code2cat1 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
掘金者阿豪2 小时前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
前端·后端
FPGA小迷弟2 小时前
FPGA 千兆以太网帧格式全解:从 IEEE 802.3 帧结构到 Verilog 收发实现
人工智能·5g·fpga开发·架构·硬件架构
鶴哥只手遮天2 小时前
AFSIM 2.9.0 深度解析·进阶卷第 1 章 插件源码精读:16 个 WSF 插件的架构与实现
后端
愚农搬码2 小时前
低代码表单与在线问卷不是一回事:产品定位和技术边界
后端
武子康2 小时前
固定时间步已经开了,为什么游戏回放还会走出不同位置?
人工智能·后端·agent