崩溃自动重启是什么
kernel.panic 规定内核崩溃后等待多少秒自动重启,默认 0 表示停在崩溃现场不重启。它与 kernel.panic_on_oops、内核挂死检测等参数组合,构成无人值守设备的自愈链路:先由某个条件触发崩溃,再按这里设定的延时自动重启恢复服务。选择自动重启的前提是崩溃现场已经被采集下来,否则重启之后只剩下无法复现的故障现象。
基本信息
| 参数 | kernel.panic(单位秒,0 表示不自动重启) |
|---|---|
| 触发来源 | kernel.panic_on_oops、内核挂死检测等条件 |
| 配套能力 | 崩溃转储机制与持久化内核日志 |
| 典型取值 | 无人值守节点常设为 10 秒量级 |
| 代价 | 重启期间服务中断,内存中的现场全部丢失 |
| 适用建议 | 核心业务机优先保证现场可采集,再考虑自动恢复 |
典型使用场景
- 边缘与无人值守节点:希望节点在异常后自行恢复,减少到场成本
- 集群与容器节点:依赖上层调度把业务漂移走,节点尽快回到可用状态
- 排查崩溃原因:配合转储与持久化日志还原崩溃现场
- 变更验证:确认自愈链路在真实故障时确实生效
- 可用性权衡:评估重启恢复与保持现场之间的取舍
查看与设置
查看与设置
sysctl kernel.panic kernel.panic_on_oops # 读崩溃策略
sysctl -w kernel.panic=10 # 崩溃后 10 秒自动重启
ls -l /var/crash 2>/dev/null # 崩溃转储落盘目录(如已配置)
journalctl -k -b -1 | tail # 上次启动的内核日志
sysctl kernel.hung_task_panic # 挂死检测是否触发崩溃落盘与回读
落盘与回读
# /etc/sysctl.d/99-panic.conf
kernel.panic = 10 # 崩溃后延时重启,适合无人值守节点
kernel.panic_on_oops = 1 # 视环境评估是否一并开启
# 回读命令:sysctl kernel.panic kernel.panic_on_oops相关参数关系
| 参数 | 作用 | 注意点 |
|---|---|---|
| kernel.panic | 崩溃后多久自动重启 | 0 表示保持现场不重启 |
| kernel.panic_on_oops | 发生内核异常时是否崩溃 | 部分发行版默认已开启,先读现值 |
| 挂死检测 | 检测到任务长期不调度时是否崩溃 | 阈值设置不当会造成误判重启 |
| 转储配置 | 决定崩溃现场能否被采集 | 没有它自动重启等于丢失全部线索 |
没有崩溃转储或持久化日志时,自动重启会把现场一起丢掉,故障只能靠复现。因此启用自动重启之前,应当先确认采集链路已经可用,并验证过一次真实崩溃的记录能保留下来。
触发条件类参数在很多发行版上并非默认关闭:改写之前先读现值确认基线,避免把已有的行为误认为改动带来的效果。