运维救援:日志分析与硬核排障

当系统表现异常(如进程高负载、开机卡死、文件无法删除)时,你的第一反应应该是查阅日志。本章节将教你如何使用专业的排障工具集。


1. 统一日志中心:journalctl

Systemd 所有的日志都由 journald 统一管理。

场景命令说明
实时滚动journalctl -f类似 tail -f
特定服务journalctl -u nginx只看 Nginx 的日志
报错过滤journalctl -p err -b只看本次启动的错误级别日志
时间范围journalctl --since "1 hour ago"查看过去一小时内的日志
清理空间sudo journalctl --vacuum-time=7d清理超过 7 天的旧日志

2. 内核的声音:dmesg

dmesg 输出的是内核环形缓冲区的信息。内存报错 (OOM)硬盘坏道 (I/O error)显卡驱动崩溃 都会记录在这里。

# 查看最后 20 行内核消息,并以人类易读的时间格式显示
sudo dmesg -T | tail -n 20

3. 硬核诊断工具:侦探的手法

当日志没有报错,但进程表现异常(如 CPU 100% 但不处理任务)时,你需要深入“进程内部”。

3.1 追踪系统调用:strace

strace 可以让你看到一个进程此刻正在与内核聊什么(打开了什么文件、发起了什么网络连接)。

# 跟踪 PID 为 1234 的进程正在进行的系统调用
sudo strace -p 1234
 
# 统计该进程最耗时的系统调用是哪个
sudo strace -cp 1234

3.2 查找文件占用:lsof

“文件已删除但空间没释放?”可能是某个进程还没关掉文件句柄。

# 谁在占用 /var/log/syslog?
sudo lsof /var/log/syslog
 
# 谁在监听 80 端口?
sudo lsof -i :80

4. 实战:开机卡死 (Boot Failure) 定位

如果你的 Linux 开机卡在黑屏或进度条,请按以下步骤自救:

TAB分类
💡 点击标签可切换下方对比内容
视图分类:

救援模式 (Recovery)

  1. 在 Grub 菜单选择 Advanced options
  2. 选择带有 (recovery mode) 的内核进入。
  3. 进入 root 终端进行修复。

chroot 模式 (救生舱)

如果系统彻底无法进入,使用 Live USB 启动:

  1. 挂载原硬盘根目录:mount /dev/sda1 /mnt
  2. 进入环境:arch-chroot /mnt (或手动挂载 /sys, /proc 后 chroot)
  3. 重新安装引导或修复配置。

5. 结业练习

任务 1 日志排障 故意写错 Nginx 或 SSH 的配置文件,重启服务。使用 systemctl status 和 journalctl -xe 准确定位出错的行号。
练习 2 strace 实操 运行 strace ls,观察仅仅是一个简单的 ls 命令,背后竟然发起了成百上千次系统调用。
练习 3 句柄排查 了解什么是 僵尸进程 (Zombie)?它们是否占用内存?为什么 kill -9 杀不掉它们?
💡 Tip

排障不是靠运气,而是靠证据。永远先看 journalctldmesg,然后再用 stracelsof 深入调查。

Navigation