Soluciona problemas de bloqueos suaves de vCPU


En este documento, se describe cómo solucionar problemas de bloqueos temporales de CPU virtuales. Un bloqueo temporal ocurre cuando la CPU virtual de una instancia de máquina virtual (VM) no puede ejecutar una tarea nueva durante más de 20 segundos. La mayoría de los bloqueos temporales se deben a errores en el software de la aplicación.

Los bloqueos temporales pueden hacer que las VMs no respondan durante períodos breves, interrumpir el acceso SSH a las VMs y activar tiempos de espera o conmutaciones por error de las aplicaciones. Las VMs que experimentan un bloqueo temporal también pueden tener un uso de CPU inusualmente alto o bajo, según la causa exacta del bloqueo temporal.

Cómo identificar bloqueos parciales

Para identificar si tu VM experimenta un bloqueo temporal, haz una de las siguientes acciones:

Ejemplo de seguimiento de pila de bloqueo temporal

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

Para detectar futuros bloqueos temporales, puedes hacer lo siguiente:

  1. Habilita el registro de salida del puerto en serie.

  2. Crea una política de alertas basada en registros para el siguiente registro:

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

Soluciona problemas de bloqueos parciales

Después de identificar que se produce un bloqueo temporal, prueba los siguientes pasos para solucionar el problema:

  1. Consulta el sitio del proveedor de tu SO para conocer los errores conocidos de tu versión del SO. A veces, es posible que encuentres referencias a módulos específicos del kernel en el registro de seguimiento de pila que sugieran una función u operación en particular involucrada.
  2. Identifica si el bloqueo temporal se repite con alguna frecuencia, por ejemplo, si coincide con una carga alta o ciertas actividades. Si los bloqueos temporales se correlacionan con una carga alta, es posible que debas reconfigurar tu carga de trabajo, por ejemplo, usando una VM más grande o dividiendo la carga en más VMs.
  3. Comprueba si los bloqueos temporales se correlacionan con algún cambio en tu entorno de ejecución, como implementaciones de software nuevas o actualizaciones de imagen de SO.
  4. Evalúa si se produjeron eventos de mantenimiento cerca del momento del bloqueo temporal. Para ello, revisa los registros de auditoría de los registros de auditoría de eventos del sistema.

Si los pasos anteriores para solucionar problemas no resolvieron el problema, presenta un caso de asistencia al cliente y proporciona toda la información que recopilaste durante la solución de problemas.

Prácticas recomendadas para evitar bloqueos temporales

Para evitar que tus VMs experimenten bloqueos temporales, te recomendamos que implementes las siguientes prácticas recomendadas:

  • Asegúrate de tener configurados los componentes redundantes adecuados para tu sistema, como los clústeres de alta disponibilidad, para proporcionar una capacidad de conmutación por error si una VM en particular experimenta un bloqueo temporal prolongado. Para obtener más información, consulta Diseña sistemas resilientes.
  • Para las cargas de trabajo que requieren mucha capacidad de procesamiento, considera usar familias de máquinas optimizadas para procesamiento.
  • Prueba tu carga de trabajo con eventos de mantenimiento simulados para saber cómo se comporta durante la migración en vivo (si está habilitada), en especial durante las pruebas de carga.
  • Si ejecutas un kernel de Linux personalizado o módulos personalizados en tu VM, prueba los cambios nuevos bajo carga antes de implementarlos en tu entorno de producción. Confirma que los cambios personalizados no te impidan recibir asistencia del proveedor del SO.
  • Mantén actualizado tu sistema operativo. Para obtener más información, consulta Detalles de los sistemas operativos.