Обработка и обнаружение ошибок в пакетной службе Azure
Иногда может потребоваться обрабатывать сбои задач и приложений в решении пакетной службы Azure. В этой статье описываются различные типы ошибок пакетной службы и способы устранения распространенных проблем.
Коды ошибок
Ниже приведены некоторые общие типы ошибок, которые могут возникнуть в пакетной службе.
- Сбои сети для запросов, которые никогда не достигли пакетной службы, или сетевые сбои, когда ответ пакетной службы не достиг клиента вовремя.
- Внутренние ошибки сервера. Эти ошибки имеют стандартный HTTP-ответ кода состояния
5xx
. - Ошибки, связанные с регулированием. Эти ошибки включают HTTP-ответы кода состояния
429
или503
с заголовкомRetry-after
. -
4xx
такие ошибки, какAlreadyExists
иInvalidOperation
. Эти ошибки указывают на то, что ресурс не указан в правильном состоянии для перехода состояния.
Подробные сведения о конкретных кодах ошибок см. в разделе Состояние пакетной службы и коды ошибок. Этот справочник содержит коды ошибок для REST API, пакетной службы, а также для задач заданий и планирования.
Ошибки приложений
Во время выполнения приложение может создавать диагностические выходные данные. Эти выходные данные можно использовать для устранения неполадок. Пакетная служба записывает стандартные выходные данные и стандартные выходные данные ошибок в файлыstdout.txt и stderr.txt в каталоге задач на вычислительном узле. Дополнительные сведения приведены в разделе Файлы и каталоги в пакетной службе.
Для скачивания этих выходных файлов можно использовать портал Azure или один из пакетов SDK пакетной службы. Например, для извлечения файлов с целью устранения неполадок, используйте ComputeNode.GetNodeFile и CloudTask.GetNodeFile библиотеки .NET для пакетной службы.
Ошибки задач
Ошибки задач делятся на несколько категорий.
Ошибки предварительной обработки
Если не удается запустить задачу, для нее устанавливается ошибка предварительной обработки. Ошибки предварительной обработки могут возникать, если:
- Файлы ресурсов задачи были перемещены.
- Учетная запись хранения больше недоступна.
- Произошла другая проблема, из-за которой не удалось скопировать файлы на узел.
Ошибки передачи файлов
Если по какой-либо причине происходит сбой передачи файлов, указанных для задачи, для нее устанавливается ошибка передачи файлов. Ошибки отправки файлов могут возникнуть, если:
- Токен подписанного URL-адреса (SAS), предоставленный для доступа к службе хранилища Azure, недопустим.
- Токен SAS не предоставляет разрешений на запись.
- Учетная запись хранения больше недоступна.
- Произошла другая проблема, из-за которой не удалось скопировать файлы с узла.
Ошибки приложений
Процесс, указанный в командной строке задачи, также может завершиться ошибкой. Для получения дополнительной информации см. раздел Коды выхода задач.
В случае ошибок приложения настройте пакетную службу так, чтобы она автоматически повторяла задачу, совершая заданное количество попыток.
Ошибки ограничений
Чтобы указать максимальную продолжительность выполнения для задания или задачи, задайте maxWallClockTime
ограничение. Используйте этот параметр для завершения задач, которые не выполняются.
Если задача превышает максимальное время:
- Задача помечается как завершенная.
- Код выхода имеет значение
0xC000013A
. - Поле schedulingError помечается как
{ category:"ServerError", code="TaskEnded"}
.
Коды завершения задач
Когда задача выполняет процесс, пакетная служба заполняет свойство кода завершения задачи кодом возврата процесса. Если процесс возвращает ненулевой код выхода, пакетная служба помечает задачу как завершившуюся ошибкой.
Пакетная служба не определяет код выхода задачи. Сам процесс или операционная система, в которой выполняется процесс, определяет код выхода.
Сбои и прерывания задач
Задачи могут иногда завершаться ошибками или прерываться. Пример:
- Само приложение задачи может завершиться ошибкой.
- Узел, на котором выполняется задача, может перезагрузиться.
- Операция изменения размера может удалить узел из пула. Это действие может произойти, если политика освобождения пула немедленно удаляет узлы без ожидания завершения задач.
Во всех случаях пакетная служба может автоматически поставить задачу в очередь на повторное выполнение на другом узле.
Задача может также зависнуть или выполняться слишком долго из-за кратковременного сбоя. Для задачи можно установить максимальный интервал выполнения. При превышении такого максимума пакетная служба прервет приложение задачи.
Подключение к вычислительным узлам
Вы можете выполнить отладку и устранение неполадок, выполнив удаленный вход на вычислительный узел. Используйте портал Azure, чтобы скачать RDP-файл для узлов Windows и получить сведения о подключении SSH для узлов Linux. Вы также можете скачать эту информацию с помощью API Batch .NET или Batch Python.
Чтобы подключиться к узлу по протоколу RDP или SSH, на узле необходимо сначала создать пользователя. Используйте один из следующих методов.
- портал Azure.
- REST API пакетной службы: adduser
- .NET API пакетной службы: ComputeNode.CreateComputeNodeUser
- Модуль Python пакетной службы: add_user
При необходимости настройте или отключите доступ к вычислительным узлам.
Устранение неполадок с узлами
Клиентское приложение или служба пакетной службы может проверять метаданные невыполненных задач, чтобы идентифицировать проблемный узел. Каждый узел в пуле имеет уникальный идентификатор. Метаданные задачи включают узел, на котором выполняется задача. Обнаружив проблемный узел, попробуйте применить следующие методы, чтобы устранить сбой.
Перезагрузка узла
В некоторых случаях перезапуск узла может устранить скрытые проблемы, например, задержки и сбои при выполнении процессов. Если пул использует задачу запуска или задание использует задачу подготовки задания, эти задачи будут выполнены при перезапуске узла.
- REST API пакетной службы: reboot
- .NET API пакетной службы: ComputeNode.Reboot
Пересоздание образа узла
Пересоздание образа узла переустановит операционную систему. Задачи запуска и задачи подготовки заданий выполняются повторно после пересоздания образа.
- REST API пакетной службы: reimage
- .NET API пакетной службы: ComputeNode.Reimage
Удаление узла из пула
Иногда требуется удалить узел из пула.
- REST API пакетной службы: removenodes
- API .NET пакетной службы: PoolOperations
Отключение планирования задач на узле
Отключение планирования задач на узле фактически отключает узел в автономном режиме. Пакетная служба не назначает дальнейшие задачи узлу. Однако узел продолжает работать в пуле. Затем можно дополнительно исследовать сбои, не теряя данные задачи, завершившей сбой. Узел также не приведет к дополнительным сбоям задач.
Например, отключите планирование задач на узле. Затем войдите в узел удаленно. Изучите журналы событий и выполните другие действия по устранению неполадок. После решения проблем снова включите планирование задач, чтобы вернуть узел в режим онлайн.
- REST API пакетной службы: enablescheduling
- .NET API пакетной службы: ComputeNode.EnableScheduling
Эти действия можно использовать для указания пакетной обработки задач, выполняемых в данный момент на узле. Например, при отключении планирования задач с помощью .NET API пакетной службы можно указать значение перечисления для DisableComputeNodeSchedulingOption. Можно выбрать один из вариантов:
- Завершение выполнения задач:
Terminate
- Повторное выполнение задач для планирования на других узлах:
Requeue
- Разрешите выполнение задач перед выполнением действия:
TaskCompletion
Повторный запуск после устранения ошибок
API пакетной службы уведомляют вас о сбоях. Можно повторить попытку на всех API с помощью встроенного глобального обработчика повторных попыток. Рекомендуется использовать этот параметр.
После сбоя подождите несколько секунд, прежде чем повторить попытку. При слишком частых или слишком быстрых повторных попытках обработчик повторных попыток будет регулировать запросы.