Ubuntu 系统系列 | 第 28 天(重访):故障排查实战——深度内核调试、文件系统救援与生产级排障

第 28/30 天(重访)

引言

首发版中我们学习了故障排查的基础四步法、GRUB 引导修复、journalctl 日志分析、OOM Killer 排查等入门到中级技能。今天这篇重访版将带你深入生产环境实战——当服务器出现更棘手的故障时,如何用专业工具进行深度诊断。

在真实运维场景中,常见的故障复杂度远超入门教程:内核崩溃需要分析 vmcore 来定位内存损坏点,文件系统损坏需要在不停机的情况下最小化恢复,生产环境突发性能问题需要用 perf 生成火焰图快速定位热点。本文将手把手带你走完这些高级故障排查场景,每个案例都来自真实生产事故。


一、高级内核调试:当 dmesg 不够用时

1.1 kdump + crash 工具:分析内核崩溃转储

当内核发生 panic 时,dmesg 和 journalctl 只能看到最后的消息,但无法深入分析崩溃时的内存状态。kdump 是 Ubuntu 内置的机制,能在内核崩溃时自动捕获内存快照(vmcore)。

配置 kdump:

# 安装 kdump 工具
sudo apt install linux-crashdump kdump-tools -y

# 查看配置状态
cat /etc/default/kdump-tools
# USE_KDUMP=1      # 启用
# KDUMP_CORESIZE=128  # 保留给 crash kernel 的内存(MB)
# KDUMP_KERNEL=/boot/vmlinuz-$(uname -r)

# 配置 GRUB 为 crash kernel 保留内存
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=".*"/GRUB_CMDLINE_LINUX_DEFAULT="crashkernel=256M"/' /etc/default/grub
sudo update-grub

# 重启使配置生效
sudo reboot

使用 crash 分析 vmcore:

vmcore 文件通常保存在 /var/crash/ 目录下,格式为 YYYYMMDD/vmcore

# 查看已捕获的 vmcore
ls -lah /var/crash/

# 安装 crash 工具
sudo apt install crash -y

# 获取当前内核调试符号
sudo apt install linux-image-$(uname -r)-dbgsym -y

# 在 /etc/apt/sources.list.d/ddebs.list 中添加:
# deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse
# deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
# deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse
# 然后 sudo apt update && sudo apt install linux-image-$(uname -r)-dbgsym

# 分析 vmcore(需要 vmlinux 调试符号文件)
sudo crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/20260816/vmcore

# crash 内部命令:
crash> bt          # 查看崩溃时的调用栈(backtrace)
crash> log         # 查看内核日志缓冲区
crash> ps          # 查看所有进程状态
crash> vm <PID>    # 查看某个进程的内存映射
crash> files <PID> # 查看某个进程打开的文件
crash> kmem -i     # 查看内核内存使用统计
crash> mod -S      # 列出已加载的内核模块
crash> rd -p <addr> # 读取指定物理地址的内存内容
crash> sym <addr>  # 将地址转换为符号名
crash> foreach bt  # 对所有进程打印 backtrace

实战案例: 某次生产服务器每天凌晨 3:15 准时崩溃,通过分析 vmcore 发现是 ext4_mark_inode_dirty 在特定条件下触发了空指针解引用,最后定位到是内核 5.4 版本的已知 bug,升级到 5.15 后修复。

1.2 kgdb + 串口调试:实时内核调试

当 kdump 无法捕获(比如系统完全死锁)时,kgdb 可以通过串口远程调试正在运行的内核:

# 内核编译时需启用 kgdb 支持(Ubuntu 默认内核已包含)
# 使能串口控制台
sudo grubby --args="kgdboc=ttyS0,115200 kgdbwait" --update-kernel=$(grubby --default-kernel)

# 或编辑 /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="kgdboc=ttyS0,115200"

# 在另一台机器上使用 gdb 连接
gdb vmlinux
(gdb) target remote /dev/ttyUSB0
(gdb) bt
(gdb) lx-dmesg
(gdb) lx-ps

1.3 内核实时跟踪:ftrace 与 trace-cmd

ftrace 是 Linux 内核内置的跟踪框架,无需安装额外工具即可使用:

# 挂载 tracefs
sudo mount -t tracefs nodev /sys/kernel/tracing

# 查看可用的跟踪器
cat /sys/kernel/tracing/available_tracers
# function, function_graph, wakeup, irqsoff, preemptoff, etc.

# 跟踪特定函数
echo function > /sys/kernel/tracing/current_tracer
echo ext4_sync_file > /sys/kernel/tracing/set_ftrace_filter
echo 1 > /sys/kernel/tracing/tracing_on
# 运行触发操作
sync
echo 0 > /sys/kernel/tracing/tracing_on
cat /sys/kernel/tracing/trace | head -50

更便捷的方式是使用 trace-cmd

sudo apt install trace-cmd -y

# 跟踪特定系统调用
sudo trace-cmd record -e syscalls:sys_enter_openat -e syscalls:sys_enter_read

# 跟踪某个进程的所有系统调用
sudo trace-cmd record -p function -P $(pgrep nginx)

# 查看结果
sudo trace-cmd report

二、文件系统深度救援:从 ext4 到 XFS 的生产级修复

2.1 ext4 文件系统损坏诊断

首发版中我们介绍了基础的 fsck 修复,但生产环境中的文件系统损坏往往更复杂:

# 查看 ext4 文件系统超级块信息
sudo dumpe2fs -h /dev/sda1 | grep -E "Block count|Block size|Filesystem state|Errors"
# Filesystem state: clean          ← 正常
# Filesystem state: not clean      ← 需要 fsck
# Filesystem state: errors         ← 有错误

# 查看文件系统日志(磁盘操作已被记录但未提交)
sudo debugfs -R "logdump -a" /dev/sda1 | tail -50

# 查看超级块备份(ext4 默认在 block 32768, 98304, 163840, 229376...)
sudo mke2fs -n /dev/sda1 2>&1 | grep "superblock"
# 输出示例:Superblock backups stored on blocks: 32768, 98304, ...

# 使用备用超级块修复
sudo fsck.ext4 -b 32768 -y /dev/sda1

2.2 ext4 日志重放与修复的高级技巧

场景: 系统突然断电,文件系统标志为 needs_recovery,但 fsck -y 卡住或报错:

# 强制日志重放(不执行完整 fsck)
sudo mount -t ext4 -o ro,noload /dev/sda1 /mnt/rescue
# noload = 不加载日志,跳过重放 -> 挂载为只读,数据可能不完整

# 更安全的做法:强制重放日志并检查
sudo e2fsck -f -p /dev/sda1   # -p = 自动修复安全的问题
# 如果不行,使用更激进的模式
sudo e2fsck -f -y /dev/sda1   # -y = 自动回答 yes

# 检查具体 inode 的损坏情况
sudo debugfs -R "stat <12>" /dev/sda1  # 查看 inode 12 的状态
sudo debugfs -R "ls -l /lost+found" /dev/sda1  # 查看恢复的文件

# 从损坏的 ext4 分区导出关键数据
sudo debugfs -R "rdump / /tmp/recovered_data/" /dev/sda1

2.3 XFS 文件系统修复

Ubuntu 服务器版广泛使用 XFS(尤其是大容量存储场景):

# 安装 XFS 工具
sudo apt install xfsprogs -y

# 检查 XFS 文件系统(必须在卸载状态下执行)
sudo xfs_repair -n /dev/sdb1  # -n = dry run(只检查不修复)

# 执行修复
sudo xfs_repair /dev/sdb1

# 查看 XFS 元数据信息
sudo xfs_info /dev/sdb1
# meta-data=/dev/sdb1    isize=512    agcount=4, agsize=65536 blks
# data     =             bsize=4096   blocks=262144, imaxpct=25
# naming   =version 2    bsize=4096   ascii-ci=0, ftype=1
# log      =internal     bsize=4096   blocks=2560, version=2
# realtime =none         extsz=4096   blocks=0, rtextents=0

# XFS 日志修复(当日志损坏时)
sudo xfs_repair -L /dev/sdb1  # -L = 清零日志(可能丢失最后的元数据操作)
# ⚠️ 注意:-L 会丢弃未提交的日志,可能导致数据不一致,但能让文件系统挂载

# 冻结 XFS 文件系统(创建快照前挂起 I/O)
sudo xfs_freeze -f /mount/point
# 创建 LVM 快照或备份
sudo xfs_freeze -u /mount/point  # 解冻

2.4 Btrfs 故障排查

Ubuntu 默认使用 ext4,但 Btrfs 作为高级文件系统也越来越常见:

# 检查 Btrfs 文件系统
sudo btrfs check /dev/sdc1

# 查看 Btrfs 使用情况
sudo btrfs filesystem usage /mount/point

# Btrfs scrub(在线数据一致性检查,类似 RAID 的 patrol read)
sudo btrfs scrub start /mount/point
sudo btrfs scrub status /mount/point

# 从 Btrfs 快照恢复
sudo btrfs subvolume list /mount/point
sudo btrfs subvolume snapshot /mount/point/@snapshots/20260815 /mount/point/restored

三、网络层面深度排障:tcpdump 与包分析

3.1 tcpdump 生产级抓包技巧

首发版涵盖了 ssnetstat 等基础网络诊断,但当问题涉及应用层协议异常时,必须抓包分析:

# 安装 tcpdump
sudo apt install tcpdump -y

# 基础抓包:监听特定端口
sudo tcpdump -i eth0 port 80 -n -c 1000

# 进阶:抓取特定 TCP 状态(如 SYN 重传)
sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0' -n

# 抓取 HTTP 请求内容(前 100 字节)
sudo tcpdump -i eth0 port 80 -X -s 100 -c 500

# 抓取 DNS 查询和响应
sudo tcpdump -i eth0 port 53 -n -v

# 抓取 TCP 重传和丢包
sudo tcpdump -i eth0 'tcp[13] & 4 != 0' -n  # RST 标记
sudo tcpdump -i eth0 'tcp[13] & 8 != 0' -n  # RST+ACK 标记

# 使用环形缓冲区(避免抓包文件撑爆磁盘)
sudo tcpdump -i eth0 -C 100 -W 10 -w /tmp/capture.pcap
# -C 100 = 每个文件 100MB,-W 10 = 最多 10 个文件(循环覆盖)

# 过滤特定 IP 对
sudo tcpdump -i eth0 host 10.0.0.5 and host 10.0.0.8 -n

3.2 使用 tshark 进行协议分析

tshark(Wireshark 的命令行版)比 tcpdump 更擅长协议解码:

# 安装
sudo apt install tshark -y

# 读取 pcap 文件并分析 HTTP 请求
tshark -r /tmp/capture.pcap -Y "http.request" -T fields 
  -e http.host -e http.request.uri -e http.request.method

# 分析 TCP 流延迟
tshark -r /tmp/capture.pcap -Y "tcp.analysis.ack_rtt" -T fields 
  -e tcp.analysis.ack_rtt

# 找出所有重传包
tshark -r /tmp/capture.pcap -Y "tcp.analysis.retransmission" -T fields 
  -e frame.time -e ip.src -e ip.dst -e tcp.port

# 分析 TLS 握手详情
tshark -r /tmp/capture.pcap -Y "tls.handshake.type == 1" -T fields 
  -e tls.handshake.ciphersuite

# 实时抓包并过滤 HTTP 请求
sudo tshark -i eth0 -Y "http.request" -T fields -e http.host -e http.request.uri

3.3 实战案例:诡异的 TCP 半连接问题

现象: 生产环境 Nginx 偶尔出现 Connection timed outss -s 显示大量 TIME_WAIT 连接,但应用一切正常。

排查过程:

# 1. 查看 TCP 连接状态统计
ss -s
# Total: 12345 (kernel 23456)
# TCP:   9876 (estab 1234, closed 8642, orphaned 0, synrecv 0, timewait 4321, ...)

# 2. 查看 TIME_WAIT 连接详情
ss -tan state time-wait | head -20

# 3. 抓包分析连接关闭过程
sudo tcpdump -i eth0 'tcp port 443' -n -c 5000 -w /tmp/https_timewait.pcap

# 4. 用 tshark 分析 FIN/ACK 序列
tshark -r /tmp/https_timewait.pcap -Y "tcp.flags.fin == 1" -T fields 
  -e frame.time -e ip.src -e ip.dst -e tcp.stream

# 5. 发现客户端大量发送 FIN 后未等待 2MSL 就重建连接
# 解决:调整 net.ipv4.tcp_fin_timeout 和 net.ipv4.tcp_tw_reuse
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
sudo sysctl -w net.ipv4.tcp_tw_reuse=1

四、性能火焰图:热点定位的终极武器

4.1 perf 性能分析

当系统负载高但排查不出瓶颈时,perf 是 Linux 性能分析的王牌工具:

# 安装 perf
sudo apt install linux-tools-common linux-tools-$(uname -r) -y

# 记录 CPU 事件采样(默认 1 秒采样 99 次)
sudo perf record -F 99 -a -g -- sleep 30
# -F 99 = 每秒 99 次采样
# -a = 所有 CPU
# -g = 记录调用栈
# sleep 30 = 采样 30 秒

# 生成火焰图(需要 FlameGraph 工具)
git clone https://github.com/brendangregg/FlameGraph.git /opt/FlameGraph

# 生成 folded stack 格式
sudo perf script | /opt/FlameGraph/stackcollapse-perf.pl > /tmp/out.perf-folded

# 生成 SVG 火焰图
/opt/FlameGraph/flamegraph.pl /tmp/out.perf-folded > /tmp/cpu_flame.svg

# 查看 top 热点函数
sudo perf report -n --stdio --sort comm,dso,symbol

# 记录特定进程
sudo perf record -F 99 -p $(pgrep -d',' mysqld) -g -- sleep 30

# 记录系统调用
sudo perf record -e syscalls:sys_enter_openat -a -- sleep 10
sudo perf script | head -20

4.2 内存泄漏排查

场景: 进程 RSS 持续增长,怀疑内存泄漏:

# 1. 确认内存增长趋势
watch -n 10 'ps -p $(pgrep -d"," mysqld) -o rss,vsz'

# 2. 使用 /proc 查看内存映射
cat /proc/$(pgrep mysqld)/smaps | grep -E "Pss|Size" | head -20

# 3. 使用 valgrind 检测(测试环境,效果显著但性能开销大)
sudo apt install valgrind -y
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all 
  --log-file=/tmp/valgrind.log ./your_app

# 4. 生产环境轻量级泄漏检测:/proc/$(pgrep mysqld)/status
grep VmRSS /proc/$(pgrep mysqld)/status
grep VmSize /proc/$(pgrep mysqld)/status

# 5. 使用 pmap 查看内存段
pmap -x $(pgrep mysqld) | sort -k3 -rn | head -10

# 6. 堆内存分析(使用 jemalloc 或 tcmalloc 的 profiler)
# 如果应用使用 jemalloc:
export MALLOC_CONF="prof:true,prof_prefix:/tmp/jeprof,lg_prof_interval:30"
# 然后用 jeprof 生成分析报告

4.3 磁盘 I/O 深度排查

iostat -x 1 显示 %util 达到 100% 时,需要进一步定位 I/O 的来源:

# 1. 安装 blktrace(块层 I/O 跟踪)
sudo apt install blktrace -y

# 2. 跟踪块设备 I/O
sudo blktrace -d /dev/sda -o /tmp/blk

# 3. 查看 I/O 延迟分布
sudo blkparse -i /tmp/blk -o /tmp/blkparse.txt
# 关注 D(磁盘请求)和 C(完成)的时间戳差

# 4. 使用 ioping 测量磁盘延迟
sudo apt install ioping -y
sudo ioping -c 100 /dev/sda
# 输出示例:min/avg/max/mdev = 48.2us / 89.3us / 1.2ms / 45.7us

# 5. I/O 级联分析:找出哪个进程在写
sudo iotop -oP -d 1
# -o = 只显示活跃的 I/O 进程
# -P = 只显示进程,不显示线程
# -d 1 = 每 1 秒刷新

# 6. 查看文件系统级别的 I/O 分布
sudo filetop -C  # 需要 bcc 工具集

安装 bcc 工具集(强大的 BPF 性能分析套件):

# Ubuntu 20.04+
sudo apt install bpfcc-tools linux-headers-$(uname -r) -y

# 常用 bcc 工具
sudo opensnoop-bpfcc     # 跟踪文件打开操作
sudo execsnoop-bpfcc     # 跟踪新进程创建
sudo ext4slower-bpfcc 1  # 显示 ext4 中慢于 1ms 的操作
sudo biolatency-bpfcc    # 显示 I/O 延迟直方图
sudo tcplife-bpfcc       # 跟踪 TCP 连接生命周期

五、容器环境故障排查:Docker 与 systemd-nspawn

5.1 Docker 容器故障排查

# 查看容器日志(受限于日志驱动配置)
docker logs --tail 100 --timestamps <container>

# 进入容器内部排查
docker exec -it <container> /bin/bash

# 查看容器资源使用
docker stats <container>

# 查看容器进程树(主机视角)
ps aux | grep <container-name>

# 容器网络排障
docker network inspect bridge
docker exec <container> ip addr
docker exec <container> ping -c 3 google.com

# 查看容器挂载卷
docker inspect <container> | jq '.[].Mounts'

# 容器 OOM 排查
dmesg | grep -i "docker|oom"
journalctl -u docker.service -p err

5.2 容器内部 core dump 分析

# 在主机上启用容器 core dump
echo '/tmp/core.%p.%u.%s' | sudo tee /proc/sys/kernel/core_pattern

# 或对特定容器配置
docker run --ulimit core=-1 --security-opt seccomp=unconfined 
  -v /tmp/cores:/cores <image>

# 分析容器内 core dump
# 需要容器内相同版本的二进制文件
gdb /path/to/binary /tmp/core.1234
(gdb) bt full
(gdb) info registers
(gdb) thread apply all bt

5.3 systemd-nspawn 容器排障

# 查看容器状态
machinectl status <container>

# 进入容器
machinectl shell <container> /bin/bash

# 查看容器日志(journald 自动隔离)
journalctl -M <container> -p err -b

# 容器网络调试
# 主机侧:
ip netns exec <container-ns> ip addr
# 或通过 machinectl:
machinectl login <container>

六、生产事故复盘:WAR Stories 与核心教训

案例一:ext4 日志损坏导致 4 小时恢复

背景: 某云服务器因 Hypervisor 异常导致磁盘 I/O 写入错误,ext4 日志损坏。

症状: mount 报错 EXT4-fs: failed to mount because of unsupported optional featuresfsck 跑一半卡死。

恢复过程:

# 1. 尝试 noload 挂载(跳过日志)
sudo mount -t ext4 -o ro,noload /dev/vda1 /mnt/rescue

# 2. 成功挂载后立即备份关键数据
sudo rsync -av /mnt/rescue/var/lib/mysql /root/backup/
sudo rsync -av /mnt/rescue/etc /root/backup/

# 3. 卸载后强制修复
sudo umount /mnt/rescue
sudo e2fsck -f -y /dev/vda1
# 修复过程:重建日志、清理孤儿 inode

# 4. 重新挂载并验证
sudo mount /dev/vda1 /mnt/rescue
sudo fsck -n /dev/vda1  # 确认 clean

教训: 先挂载 noload 备份数据再修复!不要直接 fsck -y,因为修复过程可能造成更多数据丢失。

案例二:Nginx 性能抖动与 perf 火焰图

背景: 某电商平台在大促期间 Nginx 响应时间间歇性从 50ms 飙升到 5s。

排查:

# 1. 用 perf 采样 30 秒
sudo perf record -F 99 -p $(pgrep -d',' nginx) -g -- sleep 30

# 2. 生成火焰图
sudo perf script | /opt/FlameGraph/stackcollapse-perf.pl > /tmp/nginx.folded
/opt/FlameGraph/flamegraph.pl /tmp/nginx.folded > /tmp/nginx_flame.svg

# 3. 火焰图显示 Nginx 在 ngx_ssl_handshake 中消耗 62% 的 CPU
# 根因:SSL 证书链过长(4 级中间证书),每次握手都做完整链验证

# 4. 优化方案
# - 启用 SSL session cache
# - 使用 OCSP stapling
# - 缩短证书链
# - 启用 Nginx 的 ssl_early_data

教训: 火焰图让性能瓶颈可视化,几十秒就能定位到问题热点。

案例三:Btrfs 快照写满磁盘

背景: 自动备份脚本每天创建 Btrfs 快照,但未清理旧快照,6 个月后磁盘空间耗尽。

排查:

# 1. df 显示磁盘已满,但 du 找不到大文件
df -h /data
# 显示 Used=100%,但 du -sh /data/* 只有 30%

# 2. Btrfs 专属分析
sudo btrfs filesystem df /data
# 显示 Data, Metadata, System 使用情况

sudo btrfs filesystem usage /data
# 发现 Data 占用异常高

# 3. 列出所有子卷和快照
sudo btrfs subvolume list -s /data
# 输出 180+ 个快照!

# 4. 删除过期快照
sudo btrfs subvolume delete /data/.snapshots/old-*

教训: 文件系统级的快照(LVM、Btrfs、ZFS)不会体现在 du 中,必须用文件系统本身的工具查看。


七、建立生产事故应急响应体系

7.1 Incident Response Playbook 模板

# 标准事故响应流程(SIRP)

## 第一阶段:Triage(5 分钟内)
- [ ] 确认影响范围(哪些用户/服务受影响?)
- [ ] 收集当前状态快照(top、dmesg、journalctl -b)
- [ ] 通知团队(通过 IM 或电话)

## 第二阶段:Mitigation(15 分钟内)
- [ ] 执行标准恢复方案
- [ ] 如需回滚,确认回滚版本
- [ ] 记录所有操作时间戳

## 第三阶段:Root Cause(1 小时内)
- [ ] 收集日志和 vmcore
- [ ] 分析根因
- [ ] 编写 RCA 文档

## 第四阶段:Prevention
- [ ] 实施修复方案
- [ ] 更新监控告警
- [ ] 更新 Playbook

7.2 自动故障检测脚本

#!/bin/bash
# /usr/local/bin/health-check.sh — 每 5 分钟运行
set -e

ALERT_THRESHOLD=5  # 连续失败 5 次触发告警
FAIL_COUNT_FILE="/tmp/health_fail_count"

# 检查函数
check_service() {
    if ! systemctl is-active --quiet "$1"; then
        echo "CRITICAL: $1 is not running"
        systemctl restart "$1" 2>/dev/null
        return 1
    fi
    return 0
}

check_disk() {
    local usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
    if [ "$usage" -gt 90 ]; then
        echo "WARNING: Disk usage at ${usage}%"
        return 1
    fi
    return 0
}

check_memory() {
    local free=$(free -m | awk '/^Mem:/{print $7}')
    if [ "$free" -lt 500 ]; then
        echo "WARNING: Only ${free}MB free memory"
        return 1
    fi
    return 0
}

# 执行检查
FAILURES=0
check_service nginx || ((FAILURES++))
check_service mysql || ((FAILURES++))
check_disk || ((FAILURES++))
check_memory || ((FAILURES++))

# 累计失败计数
if [ "$FAILURES" -gt 0 ]; then
    echo "$(( $(cat "$FAIL_COUNT_FILE" 2>/dev/null || echo 0) + 1 ))" > "$FAIL_COUNT_FILE"
else
    echo 0 > "$FAIL_COUNT_FILE"
fi

# 触发告警
if [ "$(cat "$FAIL_COUNT_FILE" 2>/dev/null || echo 0)" -ge "$ALERT_THRESHOLD" ]; then
    curl -s -X POST "https://api.alerting.team/v1/alert" 
      -H "Content-Type: application/json" 
      -d "{"text": "Production health check failed ${FAILURES} times"}"
    echo 0 > "$FAIL_COUNT_FILE"
fi

总结

今天重访版的故障排查实战,我们从首发版的基础四步法进阶到了生产级深度排障工具链:

  1. 内核级调试:kdump + crash 分析 vmcore、ftrace 内核跟踪
  2. 文件系统深度救援:ext4 超级块恢复、XFS 日志修复、Btrfs 快照管理
  3. 网络包级排障:tcpdump 高级过滤、tshark 协议分析、TCP 半连接排查
  4. 性能火焰图:perf 采样 + FlameGraph 生成可视化热点分析
  5. 容器排障:Docker 内部调试、core dump 分析、systemd-nspawn
  6. 生产事故复盘:三个真实 WAR Stories 及核心教训
  7. 应急响应体系:Playbook 模板、自动健康检测脚本

核心原则: 故障排查的本质是数据驱动——vmcore、perf 采样、tcpdump 包捕获、ftrace 跟踪,这些原始数据不会说谎。学会用专业工具采集和分析这些数据,你就能在复杂故障面前保持冷静。

下期预告

明天(第 29 天重访)我们将进入Ubuntu 社区与文档的进阶话题——从提交流程到参与社区治理,从 Bug 报告的艺术到成为 Ubuntu 贡献者的路径。

系列目录

天数 主题 状态
第 1 天 Ubuntu 简介与版本选择
第 2 天 手把手安装 Ubuntu
第 3 天 GNOME 桌面与软件中心
第 4 天 终端基础与文件系统
第 5 天 用户与权限管理
第 6 天 软件包管理全面对比
第 7 天 文件与文本操作实战
第 8 天 systemd 与 systemctl 完全指南
第 9 天 磁盘与文件系统管理
第 10 天 网络配置与防火墙
第 11 天 进程管理与监控
第 12 天 计划任务与自动化
第 13 天 备份与恢复策略
第 14 天 系统更新与升级管理
第 15 天 SSH 远程管理与安全加固
第 16 天 Web 服务器搭建
第 17 天 数据库服务器部署
第 18 天 Docker 容器化管理
第 19 天 文件共享服务
第 20 天 监控与告警系统
第 21 天 邮件服务器基础
第 22 天 系统安全加固
第 23 天 性能调优与内核参数
第 24 天 虚拟化技术
第 25 天 容器编排入门
第 26 天 高可用与负载均衡
第 27 天 Ubuntu 自动部署
第 28 天 故障排查实战
第 29 天 Ubuntu 社区与文档
第 30 天 30 天回顾总结
第 28 天(重访) 故障排查实战——深度内核调试、文件系统救援与生产级排障 🟢 今日
第 29 天(重访) Ubuntu 社区与文档
第 30 天(重访) 30 天回顾总结
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容