排查 vCPU 软锁定问题


本文档介绍了如何排查 vCPU 软锁定问题。当虚拟机 (VM) 实例的 vCPU 无法运行新任务超过 20 秒时,就会发生软锁定。大多数软锁定是由应用程序中的 bug 引起的。

软锁定可能会导致虚拟机短时间内无法响应、中断对虚拟机的 SSH 访问,并触发应用超时或故障切换。遇到软锁定的虚拟机的 CPU 利用率也可能异常高或异常低,具体取决于软锁定的确切原因。

识别软锁定

如需确定您的虚拟机是否遇到软锁定,请执行以下操作之一:

软锁定堆栈轨迹示例

watchdog: BUG: soft lockup - CPU#3 stuck for 22s!

如需检测未来的软锁定,您可以执行以下操作:

  1. 启用串行端口输出日志记录

  2. 针对以下日志创建基于日志的提醒政策

    resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload=~"watchdog.*lockup"
    

排查软锁定问题

确定发生软锁定后,尝试执行以下问题排查步骤来解决问题:

  1. 访问您的操作系统供应商的网站,了解您的操作系统版本是否存在已知错误。有时,您可能会在堆栈轨迹中发现对特定内核模块的引用,这表明涉及特定的函数或操作。
  2. 确定软锁定是否以任何频率重复,例如是否与高负载或特定活动重合。如果软锁定与高负载相关,您可能需要重新配置工作负载,例如使用更大的虚拟机或将负载拆分到多个虚拟机中。
  3. 检查软锁定是否与运行时环境的任何更改(例如新软件部署或操作系统映像更新)相关。
  4. 通过查看审核日志中的系统事件审核日志,评估软锁定前后是否发生了任何维护事件

如果上述问题排查步骤未能解决问题,请提交支持请求,并提供您在问题排查过程中收集的所有信息。

避免软锁定的最佳实践

为帮助防止虚拟机出现软锁定,我们建议您遵循以下最佳实践:

  • 确保您为系统配置了适当的冗余组件(例如高可用性集群),以便在特定虚拟机出现长时间软锁定时提供故障切换功能。如需了解详情,请参阅设计弹性系统
  • 对于计算密集型工作负载,请考虑使用计算优化机器家族
  • 使用模拟的维护事件测试工作负载,了解工作负载在实时迁移(如果启用)期间的表现,尤其是在负载测试期间的表现。
  • 如果您在虚拟机中运行自定义 Linux 内核或自定义模块,请先在负载下测试新的更改,然后再将其部署到生产环境。 确认您的自定义更改不会导致您无法获得操作系统供应商的支持。
  • 确保您的操作系统处于最新状态。如需了解详情,请参阅操作系统详细信息