排查系统宕机原因
在 Linux 系统宕机时,/var/log/messages
日志文件中可以搜索一些关键字来定位问题。以下是常见的关键字和它们的作用:
🔧 常见故障关键字
关键字 | 说明 |
---|---|
kernel |
查看内核级别的日志信息,如崩溃、内核Panic等 |
panic |
查找是否有“Kernel Panic”相关信息,严重的系统崩溃常见 |
oops |
内核“Oops”是内核检测到错误但系统可能仍然运行的状态 |
segfault |
段错误,一般是程序非法内存访问,可能导致服务挂掉 |
call trace |
出现异常时的调用栈,有助于进一步分析内核错误 |
Out of memory 或 oom-killer |
系统内存不足,触发 OOM Killer 杀死进程 |
hung task |
某个进程或线程卡住很久没有响应,系统可能变慢或假死 |
I/O error 或 buffer I/O error |
硬盘或设备出错 |
disk |
查看磁盘相关错误,如读取失败或设备无法挂载等 |
EXT4-fs error |
ext4 文件系统相关的错误 |
fatal |
致命错误,一般与服务崩溃或系统崩溃有关 |
shutdown |
是否有异常关机、重启记录 |
reboot |
查看是否是系统重启引起的“宕机” |
watchdog |
watchdog 超时,可能系统卡死导致自动重启 |
error |
通用错误关键字,可配合上下文一起分析 |
fail |
与 error 类似,寻找失败的服务或系统调用 |
crash |
如果系统有 crash handler,可能会记录 crash 事件 |
一些常见的问题
grep -Ei 'kernel|panic|oops|segfault|call trace|out of memory|oom-killer|hung task|I/O error|buffer I/O error|disk|EXT4-fs error|fatal|shutdown|reboot|watchdog|error|fail|crash' /var/log/messages
journalctl -b -1
是用来查看 上一次开机(上一个系统启动周期)日志 的命令。
🔍 详细解释:
journalctl
: 用于查看systemd
日志(包括内核、系统服务、应用日志等)。-b
: 表示按“启动(boot)”编号来查看日志。-1
: 表示 “上一次启动”,即最近一次宕机或重启前的日志。
🚀 使用场景举例:
比如你系统刚刚发生过宕机,现在重新启动了:
journalctl -b -1
你就可以看到 宕机前的日志,帮助你排查为什么系统挂了,比如 OOM、Kernel Panic、硬盘错误等。
📌 更多实用搭配:
- 查看上一次启动中是否有 OOM:
journalctl -b -1 | grep -i oom
- 查看上一次启动中的内核错误:
journalctl -k -b -1
- 查看过去几次启动的日志时间范围:
journalctl --list-boots
这条命令会列出启动历史,例如:
-1 abcdef1234567890abcdef1234567890 Mon 2025-04-17 03:00:00 UTC—Mon 2025-04-17 04:00:00 UTC
0 1234567890abcdef1234567890abcdef Tue 2025-04-18 09:00:00 UTC—now