主机重启排查方向命令
主机重启排查方向命令
一、时间线梳理(先做这个)先确认重启时间、关机时间、上一次启动时间。
# 当前启动时间
uptime -s
who -b
last | grep reboot
# 所有启动记录
journalctl --list-boots
# 上一次启动的最后日志
journalctl -b -1 --no-pager | tail -50
# 上一次启动的日志总量
journalctl -b -1 --no-pager | wc -l
二、系统日志(journal 全量)
排查正常关机、用户态主动重启、服务级异常。
# 上次启动最后 50 条
journalctl -b -1 --no-pager | tail -50
# 23:30 ~ 23:43 完整日志
journalctl -b -1 --no-pager --since "2026-09-25 23:30:00" --until "2026-09-25 23:43:00"
# 有没有关机流程
journalctl -b -1 --no-pager | grep -i -E "shutdown|reboot|power|Stopped|Reached target|Shutting down"
# 有没有服务失败 / 重启 / OOM
journalctl -b -1 --no-pager | grep -i -E "Failed|restart|respawn|oom|killed|timeout|abort|error"
# 23:35 ~ 23:43 每分钟日志总量
journalctl -b -1 --no-pager --since "2026-09-25 23:35:00" --until "2026-09-25 23:43:00" | \
awk '{print $1, $2, $3}' | cut -d: -f1-2 | sort | uniq -c
# 23:41 这一分钟有多少条
journalctl -b -1 --no-pager --since "2026-09-25 23:41:00" --until "2026-09-25 23:42:00" | wc -l
# 1. messages 最后 50 行
tail -50 /var/log/messages
# 2. messages 最后一条的时间
tail -1 /var/log/messages
# 3. messages 23:40 ~ 23:43
grep -E "Sep 25 23:4[0-3]" /var/log/messages
# 4. messages 异常关键词
grep -i -E "panic|Oops|BUG|lockup|hung|timeout|reset|abort|error|fail|mce|nmi|thermal|watchdog|shutdown|reboot|power" /var/log/messages | tail -100
# 5. messages 轮转文件
ls -lh /var/log/messages*
zcat /var/log/messages-*.gz 2>/dev/null | grep -E "Sep 25 23:4" | tail -50
# 6. 对比 journal 和 messages 最后一条
journalctl -b -1 --no-pager | tail -1
tail -1 /var/log/message
三、内核日志(journal -k)
排查 panic、lockup、hung task、驱动报错、Call Trace。
# panic / lockup / hung task
journalctl -k -b -1 --no-pager | grep -i -E "panic|Oops|BUG|soft lockup|hard lockup|stuck for|watchdog: BUG|hung task|blocked for more than|rcu.*stall"
# Call Trace
journalctl -k -b -1 --no-pager | grep -i -E "Call Trace|WARNING|RIP:"
# MCE / NMI / thermal
journalctl -k -b -1 --no-pager | grep -i -E "mce|nmi|hardware error|machine check|thermal|throttl"
# 驱动报错
journalctl -k -b -1 --no-pager | grep -i -E "error|fail|timeout|reset|abort|scsi|ata|nvme|sd |megaraid|mpt3sas"
# 最后 100 行原文
journalctl -k -b -1 --no-pager | tail -100
# kauditd 是否常态
journalctl -k -b -1 --no-pager | grep "kauditd_printk_skb" | \
awk '{print $1, $2, $3}' | cut -d: -f1-2 | sort | uniq -c | sort -rn | head -20
四、sar(资源维度)
排查 CPU、内存、swap、I/O、调度器、队列。
# CPU
sar -u -f /var/log/sa/sa25 -s 22:00:00 -e 23:56:00
# 进程队列和负载
sar -q -f /var/log/sa/sa25 -s 22:00:00 -e 23:56:00
# 内存
sar -r -f /var/log/sa/sa25 -s 22:00:00 -e 23:56:00
# swap
sar -W -f /var/log/sa/sa25 -s 22:00:00 -e 23:56:00
# I/O
sar -b -f /var/log/sa/sa25 -s 22:00:00 -e 23:56:00
# 上下文切换
sar -w -f /var/log/sa/sa25 -s 22:00:00 -e 23:56:00
# 确认 sa 文件
ls -lh /var/log/sa/
五、kdump / vmcore
排查是不是标准内核 panic。
```bash
# kdump 状态
kdumpctl status
systemctl status kdump
# 内核参数
cat /proc/cmdline | grep -E "crashkernel|panic|softlockup|hung_task"
# vmcore 目录
ls -lh /var/crash/
ls -lh /var/crash/*/
# kexec 是否加载
cat /sys/kernel/kexec_crash_loaded
六、硬件日志(dmesg)
排查 MCE、NMI、thermal、硬件错误。
# MCE / NMI / thermal
dmesg -T | grep -i -E "mce|nmi|hardware error|machine check|thermal|throttl"
# lockup
dmesg -T | grep -i -E "soft lockup|hard lockup|stuck for|watchdog: BUG"
# Call Trace
dmesg -T | grep -i -E "Call Trace|WARNING|RIP:"
# 存储
dmesg -T | grep -i -E "scsi|ata|nvme|sd |block|ext4|xfs" | tail -50
七、IPMI SEL
排查平台层事件。注意:SEL 是 UTC,本地时间要 +8 小时。
# SEL 概览
ipmitool sel info
# SEL 全部
ipmitool sel list
ipmitool sel elist
# ACPI 事件
ipmitool sel list | grep -i "ACPI"
# 关键事件
ipmitool sel list | grep -i -E "ACPI|soft-off|watchdog|OS Boot|OS Stop|Power Unit|Power Supply|SMI|Machine Check|CPU|Memory|Thermal|Temperature|Voltage|Fan|Reset|Reboot"
# 9/25 当天
ipmitool sel list | grep "09/25/2026"
八、IPMI event log(不是 SEL)
有些 BMC 有独立 event log。
ipmitool event 1
ipmitool event 2
ipmitool event 3
ipmitool chassis status
ipmitool power status
九、IPMI 传感器
排查电源、温度、电压、风扇。
# 全部传感器
ipmitool sensor list
ipmitool sdr list
# 分类
ipmitool sdr type temperature
ipmitool sdr type voltage
ipmitool sdr type fan
ipmitool sdr type "Power Supply"
ipmitool sdr type "Processor"
ipmitool sdr type "Memory"
十、RAID 卡
排查 RAID 卡主动复位、硬盘异常。
# 控制器状态
./storcli-linux /c0 show
# 逻辑盘状态
./storcli-linux /c0 /vall show
# 物理盘状态
./storcli-linux /c0 /eall /sall show
# 事件
./storcli-linux /c0 show events
# termlog
./storcli-linux /c0 show termlog
# 单块盘详情
./storcli-linux /c0 /e86 /s2 show all
十一、网络子系统
排查网卡、vxlan、calico、netlink。
# calico vxlan 日志
journalctl -b -1 --no-pager | grep -i -E "calico|vxlan|rtnl|invalid family" | tail -100
# 按分钟统计 calico vxlan
journalctl -b -1 --no-pager | grep "vxlan.*invalid family" | \
awk '{print $1, $2, $3}' | cut -d: -f1-2 | sort | uniq -c | sort -rn | head -20
# 网卡 link 状态
journalctl -b -1 --no-pager | grep -i -E "link|carrier|ethtool|bond|bridge|route|neigh|arp|nic|eth"
# 内核网络
journalctl -k -b -1 --no-pager | grep -i -E "net|tcp|udp|vxlan|bond|bridge|route|neigh|arp"
十二、虚拟化 / 容器
如果跑 Kubernetes / Docker。
# kubelet
journalctl -u kubelet -b -1 --no-pager --since "2026-09-25 23:30:00" --until "2026-09-25 23:43:00" | tail -100
# containerd
journalctl -u containerd -b -1 --no-pager --since "2026-09-25 23:30:00" --until "2026-09-25 23:43:00" | tail -100
# docker
journalctl -u docker -b -1 --no-pager --since "2026-09-25 23:30:00" --until "2026-09-25 23:43:00" | tail -100
十三、cron / 定时任务
排查 23:40 左右有没有重量级任务。
# cron 执行记录
journalctl -b -1 --no-pager --since "2026-09-25 23:30:00" --until "2026-09-25 23:43:00" | grep -i -E "CROND|cron|CMD"
# cron 配置
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.hourly/
ls -la /etc/cron.daily/
十四、BIOS / 固件
排查 ASR / OS Watchdog / BIOS 版本。
**需要进 BIOS 或 BMC 界面:**
- ASR(Automatic Server Restart)
- OS Watchdog Timer
- Watchdog Timer
- Auto Reset
- BIOS 版本、CPLD 版本
**命令行可查:**
dmidecode -t bios
dmidecode -t system
十五、对比其他同业务机器
排查是不是环境常态。
# 99 当前启动日志总量
journalctl -b --no-pager | wc -l
# 99 calico vxlan
journalctl -b --no-pager | grep -c "vxlan.*invalid family"
# 99 kauditd
journalctl -k -b --no-pager | grep -c "kauditd_printk_skb"
# 99 内核版本
uname -r
# 99 calico 版本
calicoctl version 2>/dev/null || kubectl get pods -n kube-system | grep calico
十六、一键排查脚本(建议保存)
#!/bin/bash
# 重启排查脚本
echo "===== 1. 启动时间 ====="
uptime -s
who -b
journalctl --list-boots | tail -5
echo "===== 2. 上次启动日志尾部 ====="
journalctl -b -1 --no-pager | tail -30
echo "===== 3. panic / lockup / hung task ====="
journalctl -k -b -1 --no-pager | grep -i -E "panic|Oops|BUG:|soft lockup|hard lockup|hung task|blocked for more than|rcu.*stall"
echo "===== 4. MCE / NMI / thermal ====="
dmesg -T | grep -i -E "mce|nmi|hardware error|machine check|thermal|throttl"
echo "===== 5. Call Trace ====="
journalctl -k -b -1 --no-pager | grep -i -E "Call Trace|WARNING|RIP:" | tail -20
echo "===== 6. kdump ====="
kdumpctl status 2>/dev/null
ls -lh /var/crash/ 2>/dev/null
echo "===== 7. SEL ACPI ====="
ipmitool sel list | grep -i "ACPI"
ipmitool sel list | tail -10
echo "===== 8. 电源传感器 ====="
ipmitool sdr type "Power Supply"
echo "===== 9. sar CPU ====="
sar -u -f /var/log/sa/sa$(date +%d) -s 22:00:00 -e 23:56:00 2>/dev/null | tail -10
echo "===== 10. sar I/O ====="
sar -b -f /var/log/sa/sa$(date +%d) -s 22:00:00 -e 23:56:00 2>/dev/null | tail -10
echo "===== 11. RAID 状态 ====="
./storcli-linux /c0 show 2>/dev/null | head -30
./storcli-linux /c0 show events 2>/dev/null | tail -20
十七、一句话总结
**排查维度一共 16 个:**
1. 时间线(`uptime -s` / `last reboot` / `journalctl --list-boots`)
2. 系统日志(`journalctl -b -1`)
3. 内核日志(`journalctl -k -b -1`)
4. sar 资源(`sar -u/-q/-r/-W/-b/-w`)
5. kdump / vmcore(`kdumpctl status` / `/var/crash/`)
6. 硬件日志(`dmesg -T`)
7. IPMI SEL(`ipmitool sel list`)
8. IPMI event log(`ipmitool event 1/2/3`)
9. IPMI 传感器(`ipmitool sdr type ...`)
10. RAID 卡(`storcli /c0 show ...`)
11. 网络子系统(`journalctl | grep calico/vxlan`)
12. 虚拟化 / 容器(`journalctl -u kubelet/containerd`)
13. cron(`journalctl | grep CROND`)
14. BIOS / 固件(`dmidecode -t bios` + BIOS 界面)
15. 对比其他机器(99)
16. 下次复现开 panic 捕获(`softlockup_panic=1` / `hung_task_panic=1`)
十八、最小排查集(时间紧时优先跑)
# 1. 确认启动时间
uptime -s
journalctl --list-boots | tail -5
# 2. 上次启动最后 50 条
journalctl -b -1 --no-pager | tail -50
# 3. 内核异常
journalctl -k -b -1 --no-pager | grep -i -E "panic|Oops|BUG:|soft lockup|hard lockup|hung task|blocked for more than|rcu.*stall|mce|nmi|thermal"
# 4. kdump
kdumpctl status
ls -lh /var/crash/
# 5. SEL ACPI
ipmitool sel list | grep -i "ACPI"
# 6. 电源
ipmitool sdr type "Power Supply"
# 7. 23:41 日志量
journalctl -b -1 --no-pager --since "2026-09-25 23:41:00" --until "2026-09-25 23:42:00" | wc -l
# 8. messages 最后
tail -50 /var/log/messages

浙公网安备 33010602011771号