首页/系统/Linux 内核与性能调优速查/kernel.panic 崩溃自动重启
sysctl 内核参数72 条

kernel.panic 崩溃自动重启

panic 后等待多少秒自动重启(0 为不重启);与 panic_on_oops、hung_task_panic 组合构成无人值守的自愈链路。

崩溃自动重启是什么

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发生内核异常时是否崩溃部分发行版默认已开启,先读现值
挂死检测检测到任务长期不调度时是否崩溃阈值设置不当会造成误判重启
转储配置决定崩溃现场能否被采集没有它自动重启等于丢失全部线索
没有崩溃转储或持久化日志时,自动重启会把现场一起丢掉,故障只能靠复现。因此启用自动重启之前,应当先确认采集链路已经可用,并验证过一次真实崩溃的记录能保留下来。
触发条件类参数在很多发行版上并非默认关闭:改写之前先读现值确认基线,避免把已有的行为误认为改动带来的效果。

易错点

  • 先开自动重启后补现场采集:崩溃线索丢失,故障无法定位
  • 不核对触发条件的现值:部分发行版默认已开启相关开关,改动效果被误判
  • 挂死检测阈值设置不当:会在系统只是短时繁忙时触发重启,影响面远超预期
  • 在核心业务机上直接启用:重启造成的服务中断比保持现场更难接受
  • 不做故障演练:自愈链路是否真的生效需要验证过才能依赖

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/kernel.rst
  • Linux 内核 Documentation/admin-guide/kdump/
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌