运维救援:日志分析与硬核排障
当系统表现异常(如进程高负载、开机卡死、文件无法删除)时,你的第一反应应该是查阅日志。本章节将教你如何使用专业的排障工具集。
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 203. 硬核诊断工具:侦探的手法
当日志没有报错,但进程表现异常(如 CPU 100% 但不处理任务)时,你需要深入“进程内部”。
3.1 追踪系统调用:strace
strace 可以让你看到一个进程此刻正在与内核聊什么(打开了什么文件、发起了什么网络连接)。
# 跟踪 PID 为 1234 的进程正在进行的系统调用
sudo strace -p 1234
# 统计该进程最耗时的系统调用是哪个
sudo strace -cp 12343.2 查找文件占用:lsof
“文件已删除但空间没释放?”可能是某个进程还没关掉文件句柄。
# 谁在占用 /var/log/syslog?
sudo lsof /var/log/syslog
# 谁在监听 80 端口?
sudo lsof -i :804. 实战:开机卡死 (Boot Failure) 定位
如果你的 Linux 开机卡在黑屏或进度条,请按以下步骤自救:
- 在 Grub 菜单选择 Advanced options。
- 选择带有 (recovery mode) 的内核进入。
- 进入 root 终端进行修复。
如果系统彻底无法进入,使用 Live USB 启动:
- 挂载原硬盘根目录:
mount /dev/sda1 /mnt - 进入环境:
arch-chroot /mnt(或手动挂载 /sys, /proc 后 chroot) - 重新安装引导或修复配置。