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