Azure Linux VM 中的内核崩溃

适用于:✔️ Linux VM

本文讨论可能导致内核崩溃的多个条件,并提供故障排除指南。

一般情况下,内核崩溃是内核无法正确加载的情况,因此系统无法启动。 当内核遇到一种不知道如何通过停止处理和保护自身的情况时,会出现另一种内核恐慌。

先决条件

确保在 Linux VM 中启用串行控制台 并正常运行。

如何识别内核恐慌?

使用Azure 门户在启动诊断边栏选项卡、串行控制台边栏选项卡或 AZ CLI 中查看 VM 的串行控制台日志输出,以确定特定的内核恐慌字符串。

内核恐慌类似于下面的输出,将在串行控制台日志的末尾显示:

Probing EDD (edd=off to disable)... ok
Memory KASLR using RDRAND RDTSC...
[  300.206297] Kernel panic - xxxxxxxx
[  300.207216] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G               ------------ T 3.xxx.x86_64 #1

一些最常见的内核恐慌事件:

恐慌消息 原因
糟糕: 0000 [#1] SMP “ (查看日志以了解详细信息) 由于取消引用错误的地址,系统崩溃。
SysRq:触发故障转储 核心转储是通过 sysrq-c 发起的,或通过将 c 回显到 /proc/sysrq-trigger 来启动。
pathname/filename>:<line number>!< 此格式是失败的 BUG 检查的标准(这与 ASSERT 类似,但逻辑被反转)。 文件名和行号将指示哪个 BUG 检查失败。
内核恐慌 - 未同步:软锁:挂起的任务 软锁定检测器发现了一个 CPU,该 CPU 未在软锁定阈值内计划监视程序任务。
内核崩溃 - 未同步:监视器检测到 CPU 0 上的硬 LOCKUP 硬锁定检测器发现了一个 CPU,该 CPU 在硬锁定阈值内未收到任何 hrtimer 中断。
内核恐慌 - 未同步:hung_task:阻止的任务 挂起的任务监视器检测到至少有一个任务处于不可中断状态,超过阻止的任务超时值。
内核崩溃 - 未同步:内存不足。 已选择panic_on_oom 系统内存不足和交换,并被迫开始终止进程以释放内存(而不是默认行为)。
内核崩溃 - 未同步:内存不足,没有可终止的进程... 系统内存不足和交换,并且一直在终止进程以释放内存,但已耗尽进程来终止。
内核崩溃 - 未同步:发生 NMI,请参阅集成管理日志了解详细信息。 监视器已截获 NMI(不可屏蔽的中断)。
内核恐慌 - 未同步:NMI IOCK 错误:未继续 系统从硬件(而不是内存奇偶校验错误)收到 IO 检查 NMI,并且已设置kernel.panic_on_io_nmi(而不是默认值)。
内核恐慌 - 未同步:NMI:不继续 系统收到 NMI(硬件或内存奇偶校验错误),并且已设置kernel.panic_on_unrecovered_nmi(而不是默认值)。
内核恐慌 - 未同步:nmi 监视器 系统收到 NMI,并且已设置kernel.panic_on_timeout或kernel.panic_on_oops(而不是默认值)。
内核恐慌 - 未同步:严重计算机检查 已针对严重情况引发计算机检查异常事件。
内核恐慌 - 未同步:尝试终止 init! init 进程是启动的第一个进程,不应退出。

方案 1:启动时发生内核崩溃

启动时出现内核崩溃会阻止 VM 完成操作系统启动过程。 每次启动虚拟机时都会发生这种情况,并且不允许登录。

此类事件通常相关,但包括但不限于:

方案 1 的解决方法

为了处理此类内核恐慌,可以使用以下方法:

方法 1:使用 Azure 串行控制台

使用 Azure 串行控制台中断启动过程,并选择以前的内核版本(如果可用)。 这样,VM 就可以再次启动,然后可以使用以下方法之一来修复非启动内核的特定问题:

方法 2:使用救援 VM 脱机修复

如果 Azure 串行控制台不可用或没有以前的内核可用,则需要救援/修复 VM 才能进行脱机修复。

使用“修复 VM”命令创建附加了目标 VM OS 磁盘副本的修复 VM。 然后使用 chroot 装载修复 VM 中的 OS 文件系统的副本。 之后,请尝试以下方法来修复内核问题:

方案 2:运行时内核崩溃

操作系统启动过程完成后,这种内核恐慌通常会在不可预知的时刻触发,并导致 VM 停止响应,防止其登录。 它通常相关,但包括但不限于:

方案 2 的解决方法

为了处理此类内核恐慌,可以使用以下方法:

  • 查看资源使用情况和整体系统性能。 内核恐慌可能与可能导致 VM 大小调整的资源短缺有关。
  • 如果可能,请安装相应的 Linux 分发存储库中可用的最新更新。 内核崩溃可能与内核或其他软件中的已知 bug 相关。
  • 内核崩溃可能与最近的内核更改相关,在这种情况下,建议启动以前的内核版本,如方案 1 的解决方法中所述
  • 如果上述选项不适用,则可能需要配置 kdump 并生成一个核心转储,以便与支持人员进行进一步分析共享。

更具体的内核恐慌方案

具有特定故障排除/恢复说明的常见内核恐慌方案:

Document 场景
主机节点升级后基于 3.10 内核的 Azure Linux VM 出现错误 本文讨论在 Azure 中运行基于 3.10 的内核的 Azure Linux VM 在 Azure 中升级主机节点后崩溃时发生的问题。
如何从与内核相关的启动问题恢复 Azure Linux 虚拟机 本文提供了在应用内核更改后 Linux 虚拟机(VM)无法重启的问题的解决方案。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区