后端与系统架构3139 字

线上问题如何快速排查

·全库 571 / 611

《线上问题如何快速排查》共 0.3 万字,通篇围绕 缓存、并发、日志、监控 展开,归在「后端与系统架构」这一层。

覆盖缓存并发日志监控上下文Redis

适合给 AI 系统搭底座、要管得住的人

目录骨架(6 节)
  1. 16.线上问题如何快速排查
  2. jdk版本:17.0.8
  3. linux版本:CentOS-7.4.1708
  4. 本次分享内容
  5. 1. 硬件问题排查
  6. 2. 多线程并发问题排查

示例代码

📎 附件:troubleshoot-demo.zip(zip, 73KB)

原文链接:https://www.yuque.com/attachments/yuque/0/2024/zip/2424104/1714952300915-b1bbb4d0-e2ca-4a8d-929d-35b24cbe8e56.zip

jdk版本:17.0.8

linux版本:CentOS-7.4.1708

​

本次分享内容

  1. 硬件问题排查
  1. 多线程并发问题排查
  1. 内存溢出问题排查
  1. CPU飙高问题排查

​

硬件问题排查

如果一个实例发生了问题,根据情况选择,要不要着急去重启。如果出现的CPU、内存飙高或者日志里出现了 OOM异常

第一步是隔离,第二步是保留现场,第三步才是问题排查。

隔离

就是把你的这台机器从请求列表里摘除,比如把 nginx 相关的权重设成零。

​

现场保留

​

瞬时态和历史态

查看比如 CPU、系统内存等,通过历史状态可以体现一个趋势性问题,而这些信息的获取一般依靠监控系统的协作。

保留信息

  1. 系统当前网络连接
ss -antp >/opt/data/dump/ss.dump 2>&1

使用 ss 命令而不是 netstat 的原因,是因为 netstat 在网络连接非常多的情况下,执行非常缓慢。

后续的处理,可通过查看各种网络连接状态的梳理,来排查 TIMEWAIT 或者 CLOSEWAIT,或者其他连接过高的问题,非常有用。

  1. 网络状态统计
netstat -s >/opt/data/dump/netstat-s.dump 2>&1

它能够按照各个协议进行统计输出,对把握当时整个网络状态,有非常大的作用。

sar -n DEV 1 2 >/opt/data/dump/sar-traffic.dump 2>&1

在一些速度非常高的模块上,比如 Redis、Kafka,就经常发生跑满网卡的情况。表现形式就是网络通信非常缓慢。

  1. 进程资源
ss -antp >/opt/data/dump/ss.dump 2>&1

通过查看进程,能看到打开了哪些文件,可以以进程的维度来查看整个资源的使用情况,包括每条网络连接、每个打开的文件句柄。同时,也可以很容易的看到连接到了哪些服务器、使用了哪些资源。这个命令在资源非常多的情况下,输出稍慢,请耐心等待。

  1. CPU 资源
mpstat >/opt/data/dump/mpstat.dump 2>&1 
vmstat 1 3 >/opt/data/dump/vmstat.dump 2>&1 
sar -p >/opt/data/dump/sar-cpu.dump 2>&1 
uptime >/opt/data/dump/uptime.dump 2>&1

主要用于输出当前系统的 CPU 和负载,便于事后排查。

  1. I/O 资源
iostat -x >/opt/data/dump/iostat.dump 2>&1

一般,以计算为主的服务节点,I/O 资源会比较正常,但有时也会发生问题,比如日志输出过多,或者磁盘问题等。此命令可以输出每块磁盘的基本性能信息,用来排查 I/O 问题。

  1. 内存问题
free -h >/opt/data/dump/free.dump 2>&1

free 命令能够大体展现操作系统的内存概况,这是故障排查中一个非常重要的点,比如 SWAP 影响了 GC,SLAB区挤占了 JVM 的内存。

  1. 其他全局
ps -ef >/opt/data/dump/ps.dump 2>&1 
dmesg >/opt/data/dump/dmesg.dump 2>&1 
sysctl -a >/opt/data/dump/sysctl.dump 2>&1

dmesg 是许多静悄悄死掉的服务留下的最后一点线索。当然,ps 作为执行频率最高的一个命令,由于内核的配置参数,会对系统和 JVM 产生影响,所以我们也输出了一份。

  1. 进程快照,最后的遗言(jinfo)
nohup java -jar -Xms256m -Xmx512m /opt/data/dump/troubleshoot-0.0.1-SNAPSHOT.jar >/opt/data/dump/troubleshoot.log 2>& 1 &
export PID=4627
jinfo $PID >/opt/data/dump/jinfo.dump 2>&1

此命令将输出 Java 的基本进程信息,包括环境变量和参数配置,可以查看是否因为一些错误的配置造成了 JVM 问题

  1. dump 堆信息
jstat -gcutil $PID >/opt/data/dump/jstat-gcutil.dump 2>&1
jstat -gccapacity $PID >/opt/data/dump/jstat-gccapacity.dump 2>&1

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求