Linux系统突然死机的排查可以从以下几个方面入手:
1. 系统日志分析
- 使用`dmesg`查看内核日志,关注是否有硬件错误(如硬盘SMART警报、内存故障)或驱动崩溃信息。
- 检查`/var/log/syslog`或`/var/log/messages`,寻找死机前发生的异常事件(如OOM Killer触发、服务崩溃)。
- 若系统能重启,通过`journalctl -b -1`查看上一次启动的日志(适用于systemd系统)。
2. 硬件故障检测
- 内存测试:运行`memtester`或`memtest86`(需从外部介质启动)排除内存问题。
- 硬盘健康:使用`smartctl -a /dev/sdX`检查SMART状态,`fsck`修复文件系统错误。
- 温度监控:通过`sensors`或`ipmitool`(服务器)检查CPU/GPU温度是否过高触发保护机制。
3. 资源耗尽排查
- 内存不足:`free -h`确认剩余内存,结合`top`或`htop`查看占用高的进程。
- CPU负载:`uptime`查看平均负载,`sar -q`(需安装sysstat)分析历史队列数据。
- 磁盘I/O阻塞:`iostat -x 1`观察`%util`和`await`,高延迟可能引发假死。
4. 内核与驱动问题
- 检查已加载模块(`lsmod`),尝试卸载可疑驱动(如第三方显卡驱动)。
- 内核崩溃(Panic)可尝试更新内核或启用`kdump`捕获崩溃转储文件。
- 若使用NVIDIA等闭源驱动,回退到开源版本(如`nouveau`)测试稳定性。
5. 电源与外部因素
- 排查UPS供电异常或主板电容鼓包等硬件问题。
- 虚拟机环境检查宿主机资源分配和Hypervisor日志(如`/var/log/libvirt/qemu/`)。
6. 高级调试工具
- 配置`sysrq`快捷键(需启用内核参数`sysrq_always_enabled`),死机时尝试同步磁盘(`Alt+SysRq+s`)或安全重启(`Alt+SysRq+b`)。
- 使用`strace`或`perf`进程系统调用,定位卡死点。
扩展知识:
SysRq机制:通过`/proc/sys/kernel/sysrq`控制调试级别,强制卸载文件系统或终止进程。
内核软死锁(soft lockup):`/proc/sys/kernel/watchdog_thresh`可调整检测阈值,`nmi_watchdog`启用更底层监控。
cgroup限制:对关键服务(如数据库)设置内存/CPU限制(`/sys/fs/cgroup/`),避免单进程拖垮系统。
如需进一步分析,可提供死机前的操作场景(如是否运行特定软件、是否外接了设备)或日志片段。