排查 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 内核或自定义模块,请先在负载下测试新更改,然后再将其部署到生产环境。确认您的自定义更改不会导致您无法获得操作系统供应商的支持。
  • 请及时更新您的操作系统。如需了解详情,请参阅操作系统详细信息