Linux
本文档介绍了如何排查 vCPU 软锁定问题。当虚拟机 (VM) 实例的 vCPU 无法运行新任务超过 20 秒时,就会发生软锁定。大多数软锁定是由应用程序中的 bug 引起的。
软锁定可能会导致虚拟机短时间内无法响应、中断对虚拟机的 SSH 访问,并触发应用超时或故障切换。遇到软锁定的虚拟机的 CPU 利用率也可能异常高或异常低,具体取决于软锁定的确切原因。
识别软锁定
如需确定您的虚拟机是否遇到软锁定,请执行以下操作之一:
- 如果您之前为虚拟机启用了串行端口输出日志记录,请查看串行端口输出以查找软锁定堆栈轨迹。
- 查看虚拟机的操作系统日志 (
/var/log/messages
),以查找软锁定堆栈轨迹。
软锁定堆栈轨迹示例
watchdog: BUG: soft lockup - CPU#3 stuck for 22s!
如需检测未来的软锁定,您可以执行以下操作:
针对以下日志创建基于日志的提醒政策:
resource.type="gce_instance" log_id("serialconsole.googleapis.com/serial_port_1_output") textPayload=~"watchdog.*lockup"
排查软锁定问题
确定发生软锁定后,尝试执行以下问题排查步骤来解决问题:
- 访问您的操作系统供应商的网站,了解您的操作系统版本是否存在已知错误。有时,您可能会在堆栈轨迹中发现对特定内核模块的引用,这表明涉及特定的函数或操作。
- 确定软锁定是否以任何频率重复,例如是否与高负载或特定活动重合。如果软锁定与高负载相关,您可能需要重新配置工作负载,例如使用更大的虚拟机或将负载拆分到多个虚拟机中。
- 检查软锁定是否与运行时环境的任何更改(例如新软件部署或操作系统映像更新)相关。
- 通过查看审核日志中的系统事件审核日志,评估软锁定前后是否发生了任何维护事件。
如果上述问题排查步骤未能解决问题,请提交支持请求,并提供您在问题排查过程中收集的所有信息。
避免软锁定的最佳实践
为帮助防止虚拟机出现软锁定,我们建议您遵循以下最佳实践:
- 确保您为系统配置了适当的冗余组件(例如高可用性集群),以便在特定虚拟机出现长时间软锁定时提供故障切换功能。如需了解详情,请参阅设计弹性系统。
- 对于计算密集型工作负载,请考虑使用计算优化机器家族。
- 使用模拟的维护事件测试工作负载,了解工作负载在实时迁移(如果启用)期间的表现,尤其是在负载测试期间的表现。
- 如果您在虚拟机中运行自定义 Linux 内核或自定义模块,请先在负载下测试新的更改,然后再将其部署到生产环境。 确认您的自定义更改不会导致您无法获得操作系统供应商的支持。
- 确保您的操作系统处于最新状态。如需了解详情,请参阅操作系统详细信息。