跳转至

排查系统宕机原因

在 Linux 系统宕机时,/var/log/messages 日志文件中可以搜索一些关键字来定位问题。以下是常见的关键字和它们的作用:


🔧 常见故障关键字

关键字 说明
kernel 查看内核级别的日志信息,如崩溃、内核Panic等
panic 查找是否有“Kernel Panic”相关信息,严重的系统崩溃常见
oops 内核“Oops”是内核检测到错误但系统可能仍然运行的状态
segfault 段错误,一般是程序非法内存访问,可能导致服务挂掉
call trace 出现异常时的调用栈,有助于进一步分析内核错误
Out of memoryoom-killer 系统内存不足,触发 OOM Killer 杀死进程
hung task 某个进程或线程卡住很久没有响应,系统可能变慢或假死
I/O errorbuffer 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