Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En ocasiones, es posible que tenga que controlar errores de tareas y aplicaciones en la solución de Azure Batch. En este artículo se explican 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 red para solicitudes que nunca llegaron a Batch o errores de red cuando la respuesta de Batch no llegó al cliente a tiempo.
- Errores internos del servidor. Estos errores tienen una respuesta HTTP de código de estado estándar
5xx
. - Errores relacionados con la limitación. Estos errores incluyen respuestas HTTP de código de estado
429
o503
con el encabezadoRetry-after
. -
4xx
errores comoAlreadyExists
yInvalidOperation
. Estos errores indican que el recurso no está en el estado correcto para la transición de estado.
Para obtener información detallada sobre códigos de error específicos, consulte Códigos de error y estado de Batch. Esta referencia incluye códigos de error para la API REST, el servicio Batch y para tareas de trabajo y programación.
Errores de aplicación
Durante la ejecución, una aplicación podría generar una salida de diagnóstico. Puede usar esta salida para solucionar problemas. El servicio Batch escribe la salida estándar y la salida de error estándar en los archivos stdout.txt y stderr.txt en el directorio de tareas del nodo de proceso. Para obtener 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 solución de problemas, use ComputeNode.GetNodeFile y CloudTask.GetNodeFile en la biblioteca .NET de Batch.
Errores de tarea
Los errores de tarea se dividen en varias categorías.
Errores de preprocesamiento
Si no se inicia una tarea, se establece un error de preprocesamiento para la tarea. Los errores de preprocesamiento pueden producirse si:
- Los archivos de recursos de la tarea han sido trasladados.
- 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 los archivos especificados para una tarea no se pueden cargar por cualquier motivo, se establece un error de carga de archivos para la tarea. Los errores de carga de archivos pueden producirse 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 producir un error. Para obtener más información, consulte Códigos de salida de tareas.
En el caso de los errores de aplicación, configure Batch para reintentar 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 maxWallClockTime
restricción . Use esta configuració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 tareas
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 propio proceso, o el sistema operativo en el que se ejecuta el proceso, determina el código de salida.
Errores o interrupciones de tareas
Es posible que las tareas produzcan errores o se interrumpan ocasionalmente. Por ejemplo:
- Es posible que se produzca un error en la propia aplicación de tarea.
- 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 en cola automáticamente la tarea para su ejecución en otro nodo.
También es posible que un problema intermitente provoque 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 nodos de cómputo
Puede realizar la depuración y la solución de problemas iniciando sesión en un nodo de cómputo de forma remota. Use Azure Portal para descargar un archivo de Protocolo de escritorio remoto (RDP) para 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, cree primero un usuario en el nodo. Utilice uno de los métodos siguientes:
- Azure Portal
- API de REST de Batch: adduser
- API de .NET de Batch: ComputeNode.CreateComputeNodeUser
- Módulo de Python de Batch: add_user
Si es necesario, configure o deshabilite el acceso a los nodos de proceso.
Solución de problemas de nodos
La aplicación o servicio cliente de Batch puede examinar los metadatos de las tareas con errores para identificar un nodo de problema. Cada nodo de un grupo tiene un identificador único. Los metadatos de la 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.
Reinicio del nodo
Al reiniciar un nodo, a veces se corrigen problemas latentes, como procesos atascados o bloqueados. Si el grupo usa una tarea de inicio o el trabajo usa una tarea de preparación de trabajos, un reinicio de nodo ejecuta estas tareas.
- API REST de Batch: reinicio
- API de .NET de Batch: ComputeNode.Reboot
Restablecer imagen inicial del nodo
Al volver a realizar la nueva imagen de un nodo, se vuelve a instalar el sistema operativo. Inicie las tareas y las tareas de preparación del trabajo vuelvan a ejecutarse después de que se produzca el reintegro.
- API REST de Batch: reimage
- API de .NET de Batch: ComputeNode.Reimage
Eliminar nodo del grupo
A veces es necesario quitar el nodo del grupo.
- API de REST de Batch: removenodes
- API de .NET de Batch: PoolOperations
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 más tareas al nodo. Sin embargo, el nodo continúa ejecutándose en el grupo. Después, puede investigar aún más los errores sin perder los datos de la tarea con errores. El nodo tampoco provocará más errores de tarea.
Por ejemplo, deshabilite 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 otra solución de problemas. Después de resolver los problemas, habilite la programación de tareas de nuevo para volver a poner el nodo en línea.
- API de REST de Batch: enablescheduling
- API de .NET de Batch: ComputeNode.EnableScheduling
Puede usar estas acciones para especificar que Batch controle las tareas que se ejecutan actualmente en el nodo. Por ejemplo, al deshabilitar la programación de tareas con la API de Batch .NET, puede especificar un valor de enumeración para DisableComputeNodeSchedulingOption. Puede optar por:
- Finalizar tareas en ejecución:
Terminate
- Volver a poner en cola tareas para programar en otros nodos:
Requeue
- Permita 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 los errores. Puede reintentar todas las API mediante el controlador de reintentos global integrado. Se recomienda usar esta opción.
Después de un error, espere varios segundos antes de volver a intentarlo. Si vuelve a intentarlo con demasiada frecuencia o demasiado rápido, el controlador de reintentos limita las solicitudes.