Control y detección de errores en Azure Batch

En ocasiones, es posible que tenga que controlar los errores de tareas y aplicaciones en la solución de Azure Batch. En este artículo se explican los distintos tipos de errores de Batch y cómo resolver problemas comunes.

Códigos de error

Algunos tipos generales de errores que puede ver en Batch son:

  • Errores de redes para solicitudes que nunca llegaron a Batch o errores de conexión en red cuando la respuesta de Batch no llegó al cliente a tiempo.
  • Errores internos del servidor. Estos errores tienen una respuesta 5xx HTTP de código de estado estándar.
  • Errores relacionados con la limitación. Estos errores incluyen 429 o 503 las respuestas HTTP del código de estado con el Retry-after encabezado.
  • 4xx errores como AlreadyExists y InvalidOperation. Estos errores indican que el recurso no está en el estado correcto para la transición de estado.

Para información detallada sobre los códigos de error específicos, vea Estado del lote y códigos de error. Esta referencia incluye códigos de error para la API de REST, el servicio Batch y para las tareas y programación de trabajos.

Errores de aplicación

Durante la ejecución, una aplicación podría generar resultados de diagnóstico. Puede usar esta salida para solucionar problemas. El servicio Batch escribe resultados de salida estándar y error estándar en los archivos stdout.txt y stderr.txt ubicados en el directorio de la tarea en el nodo de ejecución. Para más información, consulte Archivos y directorios en Batch.

Para descargar estos archivos de salida, use Azure Portal o uno de los SDK de Batch. Por ejemplo, para recuperar archivos con fines de resolución de problemas, utilice ComputeNode.GetNodeFile y CloudTask.GetNodeFile en la biblioteca de Batch para .NET.

Errores de tarea

Los errores de tarea se dividen en varias categorías.

Errores de procesamiento previo

Si una tarea no se inicia, se establece un error de procesamiento previo para la misma. Se pueden producir errores de procesamiento previo si:

  • Los archivos de recursos de la tarea se movieron.
  • La cuenta de almacenamiento ya no está disponible.
  • Se produjo otro problema que impedía la copia correcta de archivos en el nodo.

Errores de carga de archivos

Si por cualquier motivo los archivos especificados para una tarea no se pueden cargar, se establece un error de carga de archivos para la tarea. Se pueden producir errores de carga de archivos si:

  • El token de firma de acceso compartido (SAS) proporcionado para acceder a Azure Storage no es válido.
  • El token de SAS no proporciona permisos de escritura.
  • La cuenta de almacenamiento ya no está disponible.
  • Se produjo otro problema que impedía la copia correcta de archivos desde el nodo.

Errores de aplicación

El proceso especificado por la línea de comandos de la tarea también puede presentar errores. Para más información, consulte el artículo sobre las Código de salida de tareas.

Para los errores de aplicaciones, configure el servicio Batch para volver a intentar automáticamente la tarea hasta un número especificado de veces.

Errores de restricción

Para especificar la duración máxima de ejecución de un trabajo o tarea, establezca la restricción maxWallClockTime. Use esta opción para finalizar las tareas que no progresan.

Cuando la tarea supera el tiempo máximo:

  • La tarea se marca como completada.
  • El código de salida se establece en 0xC000013A.
  • El campo schedulingError se marca como { category:"ServerError", code="TaskEnded"}.

Códigos de salida de la tarea

Cuando una tarea ejecuta un proceso, Batch rellena la propiedad de código de salida de la tarea con el código de retorno del proceso. Si el proceso devuelve un código de salida distinto de cero, el servicio Batch marca la tarea como con errores.

El servicio Batch no determina el código de salida de una tarea. El proceso en sí o el sistema operativo en que se ejecuta el proceso determina el código de salida.

Errores o interrupciones de tareas

En ocasiones, las tareas pueden presentar errores o interrumpirse. Por ejemplo:

  • La propia aplicación de tareas podría producir un error.
  • El nodo en el que se ejecuta la tarea podría reiniciarse.
  • Una operación de cambio de tamaño podría quitar el nodo del grupo. Esta acción puede producirse si la directiva de desasignación del grupo quita los nodos inmediatamente sin esperar a que finalicen las tareas.

En todos los casos, Batch puede volver a poner automáticamente en cola la tarea para su ejecución en otro nodo.

También es posible que un problema intermitente haga que una tarea deje de responder o tarde demasiado tiempo en ejecutarse. Puede establecer un intervalo de ejecución máximo para una tarea. Si una tarea supera el intervalo, el servicio Batch interrumpe la aplicación de tareas.

Conexión a los nodos de proceso

Puede realizar tareas de depuración y solución de problemas si se inicia una sesión remota en un nodo de proceso. Use Azure Portal para descargar un protocolo de escritorio remoto (RDP) para los nodos de Windows y obtener información de conexión de Secure Shell (SSH) para los nodos de Linux. También puede descargar esta información mediante las API de Batch .NET o Batch Python.

Para conectarse a un nodo a través de RDP o SSH, primero cree un usuario en el nodo. Utilice uno de los métodos siguientes:

En caso de que sea necesario, configure o deshabilite el acceso a los nodos de ejecución.

Solución de problemas de nodos problemáticos

La aplicación o el servicio cliente de Batch pueden examinar los metadatos de las tareas con errores para identificar un nodo con problemas. Cada nodo de un grupo tiene un identificador único. Los metadatos de tarea incluyen el nodo donde se ejecuta una tarea. Después de encontrar el nodo del problema, pruebe los métodos siguientes para resolver el error.

Reiniciar nodo

Reiniciar un nodo a veces corrige incidencias latentes, como procesos bloqueados o bloqueados. Si el grupo usa una tarea de inicio o el trabajo usa una tarea de preparación del trabajo, el reinicio del nodo ejecuta estas tareas.

Restablecer imagen inicial del nodo

Al volver a realizar la nueva imagen de un nodo, se vuelve a instalar el sistema operativo. Las tareas de inicio y las tareas de preparación del trabajo se vuelvan a ejecutar después de que se vuelva a crear la imagen.

Quitar nodo del grupo

A veces es necesario quitar el nodo del grupo.

Deshabilitar la programación de tareas en el nodo

Al deshabilitar la programación de tareas en un nodo, el nodo se desconecta de forma eficaz. Batch no asigna ninguna otra tarea al nodo. Sin embargo, el nodo continúa ejecutándose en el grupo. A continuación, puede investigar aún más los errores sin perder los datos de las tareas con errores. El nodo tampoco provocará más errores de tareas.

Por ejemplo, deshabilitar la programación de tareas en el nodo. A continuación, inicie sesión en el nodo de forma remota. Examine los registros de eventos y realice otras soluciones de problemas. Después de resolver los problemas, vuelva a habilitar la programación de tareas para volver a poner el nodo en línea.

Puede usar estas acciones para especificar que Batch controla las tareas que se ejecutan actualmente en el nodo. Por ejemplo, al deshabilitar la programación de tareas con la API .NET de Batch, puede especificar un valor de enumeración para DisableComputeNodeSchedulingOption. Puede:

  • Terminar las tareas en ejecución: Terminate
  • Tareas de puesta en cola para la programación en otros nodos: Requeue
  • Permitir que las tareas en ejecución se completen antes de realizar la acción: TaskCompletion

Reintento después de errores

Las API de Batch le notifican errores. Puede reintentar todas las API mediante el controlador de reintentos global integrado. Es un procedimiento recomendado usar esta opción.

Después de un error, espere varios segundos antes de volver a intentarlo. Si se realizan reintentos con demasiada frecuencia o rapidez, el controlador de reintentos limita las solicitudes.

Pasos siguientes