다음을 통해 공유


Azure Batch에서 오류 처리 및 검색

때때로 Azure Batch 솔루션에서 태스크 및 애플리케이션 오류를 처리해야 할 수 있습니다. 이 문서에서는 다양한 유형의 Batch 오류와 일반적인 문제를 해결하는 방법을 설명합니다.

오류 코드

Batch에 표시될 수 있는 몇 가지 일반적인 오류 유형은 다음과 같습니다.

  • Batch에 도달하지 않은 요청에 대한 네트워킹 오류 또는 Batch 응답이 시간에 클라이언트에 도달하지 못한 경우의 네트워킹 오류입니다.
  • 내부 서버 오류입니다. 이러한 오류에는 표준 5xx 상태 코드 HTTP 응답이 있습니다.
  • 속도 제한 관련 오류입니다. 이러한 오류에는 429 헤더가 있는 503 또는 Retry-after 상태 코드 HTTP 응답이 포함됩니다.
  • 4xx 오류, 예를 들어 AlreadyExistsInvalidOperation와 같은. 이러한 오류는 리소스가 상태 전환에 대한 올바른 상태가 아님을 나타냅니다.

특정 오류 코드에 대한 자세한 내용은 Batch 상태 및 오류 코드를 참조하세요. 이 참조에는 REST API, Batch 서비스 및 작업 작업 및 예약에 대한 오류 코드가 포함됩니다.

애플리케이션 오류

실행하는 동안 애플리케이션은 진단 출력을 생성할 수 있습니다. 이 출력을 사용하여 문제를 해결할 수 있습니다. Batch 서비스는 표준 출력 및 표준 오류 출력을 컴퓨팅 노드의 작업 디렉터리에 있는stdout.txt및stderr.txt 파일에 씁니다. 자세한 내용은 Batch의 파일 및 디렉터리를 참조하세요.

이러한 출력 파일을 다운로드하려면 Azure Portal 또는 Batch SDK 중 하나를 사용합니다. 예를 들어 문제 해결을 위해 파일을 검색하려면 Batch .NET 라이브러리에서 ComputeNode.GetNodeFileCloudTask.GetNodeFile 을 사용합니다.

작업 오류

작업 오류는 여러 범주로 분류됩니다.

사전 처리 오류

작업이 시작되지 않으면 태스크에 대한 사전 처리 오류가 설정됩니다. 다음과 같은 경우 사전 처리 오류가 발생할 수 있습니다.

  • 작업의 리소스 파일이 이동되었습니다.
  • 스토리지 계정을 더 이상 사용할 수 없습니다.
  • 노드에 파일을 성공적으로 복사할 수 없는 또 다른 문제가 발생했습니다.

파일 업로드 오류

작업에 대해 지정한 파일이 어떤 이유로든 업로드에 실패하면 작업에 대해 파일 업로드 오류가 설정됩니다. 다음과 같은 경우 파일 업로드 오류가 발생할 수 있습니다.

  • Azure Storage에 액세스하기 위해 제공된 SAS(공유 액세스 서명) 토큰이 잘못되었습니다.
  • SAS 토큰은 쓰기 권한을 제공하지 않습니다.
  • 스토리지 계정을 더 이상 사용할 수 없습니다.
  • 노드에서 파일을 성공적으로 복사할 수 없는 또 다른 문제가 발생했습니다.

애플리케이션 오류

태스크의 명령줄에서 지정한 프로세스도 실패할 수 있습니다. 자세한 내용은 작업 종료 코드를 참조하세요.

애플리케이션 오류의 경우 지정된 횟수까지 작업을 자동으로 다시 시도하도록 Batch를 구성합니다.

제약 조건 오류

작업 또는 태스크의 최대 실행 기간을 지정하려면 제약 조건을 maxWallClockTime 설정합니다. 이 설정을 사용하여 진행하지 못한 작업을 종료합니다.

태스크가 최대 시간을 초과하는 경우:

  • 작업이 완료된 것으로 표시됩니다.
  • 종료 코드가 .로 설정됩니다 0xC000013A.
  • schedulingError 필드는 .로 { category:"ServerError", code="TaskEnded"}표시됩니다.

작업 종료 코드

태스크가 프로세스를 실행하면 Batch는 태스크의 종료 코드 속성을 프로세스의 반환 코드로 채웁니다. 프로세스가 0이 아닌 종료 코드를 반환하는 경우 Batch 서비스는 태스크를 실패로 표시합니다.

Batch 서비스는 작업의 종료 코드를 결정하지 않습니다. 프로세스 자체 또는 프로세스가 실행되는 운영 체제가 종료 코드를 결정합니다.

작업 오류 또는 중단

태스크가 때때로 실패하거나 중단될 수 있습니다. 다음은 그 예입니다.

  • 작업 애플리케이션 자체가 실패할 수 있습니다.
  • 태스크가 실행 중인 노드가 다시 부팅될 수 있습니다.
  • 크기 조정 작업을 수행하면 풀에서 노드가 제거될 수 있습니다. 이 작업은 풀의 할당 취소 정책이 작업이 완료될 때까지 기다리지 않고 노드를 즉시 제거하는 경우에 발생할 수 있습니다.

모든 경우에 Batch는 다른 노드에서 실행하기 위해 작업을 자동으로 다시 큐에 추가할 수 있습니다.

일시적인 문제로 인해 태스크가 응답을 중지하거나 실행하는 데 너무 오래 걸릴 수도 있습니다. 작업에 대한 최대 실행 간격을 설정할 수 있습니다. 태스크가 간격을 초과하면 Batch 서비스가 작업 애플리케이션을 중단합니다.

컴퓨팅 노드에 연결

원격으로 컴퓨팅 노드에 로그인하여 디버깅 및 문제 해결을 수행할 수 있습니다. Azure Portal을 사용하여 Windows 노드용 RDP(원격 데스크톱 프로토콜) 파일을 다운로드하고 Linux 노드에 대한 SSH(Secure Shell) 연결 정보를 가져옵니다. Batch .NET 또는 Batch Python API를 사용하여 이 정보를 다운로드할 수도 있습니다.

RDP 또는 SSH를 통해 노드에 연결하려면 먼저 노드에 사용자를 만듭니다. 다음 방법 중 하나를 사용하십시오.

필요한 경우 컴퓨팅 노드에 대한 액세스를 구성하거나 사용하지 않도록 설정합니다.

노드 문제 해결

Batch 클라이언트 애플리케이션 또는 서비스는 실패한 작업의 메타데이터를 검사하여 문제 노드를 식별할 수 있습니다. 풀의 각 노드에는 고유한 ID가 있습니다. 작업 메타데이터에는 태스크가 실행되는 노드가 포함됩니다. 문제 노드를 찾은 후 다음 메서드를 시도하여 오류를 해결합니다.

노드 다시 부팅

노드를 다시 시작하면 중단되거나 중단된 프로세스와 같은 잠재적인 문제가 해결되는 경우가 있습니다. 풀에서 시작 태스크를 사용하거나 작업 준비 태스크를 사용하는 경우 노드 다시 시작은 이러한 작업을 실행합니다.

노드를 다시 설치하다

노드를 다시 설치하면 운영 체제가 다시 설치됩니다. 이미지 다시 설치가 수행된 후 실행 태스크와 작업 준비 태스크가 다시 실행됩니다.

풀에서 노드 제거

풀에서 노드를 제거해야 하는 경우도 있습니다.

노드에서 작업 예약 사용 안 함

노드에서 작업 예약을 사용하지 않도록 설정하면 노드가 효과적으로 오프라인 상태가 될 수 있습니다. Batch는 노드에 더 이상 작업을 할당하지 않습니다. 그러나 노드는 풀에서 계속 실행됩니다. 그런 다음 실패한 작업의 데이터를 잃지 않고 오류를 추가로 조사할 수 있습니다. 또한 노드는 더 많은 작업 실패를 일으키지 않습니다.

예를 들어 노드에서 작업 예약을 사용하지 않도록 설정합니다. 그런 다음, 노드에 원격으로 로그인합니다. 이벤트 로그를 검사하고 다른 문제 해결을 수행합니다. 문제를 해결한 후 작업 예약을 다시 사용하도록 설정하여 노드를 다시 온라인 상태로 설정합니다.

이러한 작업을 사용하여 노드에서 현재 실행 중인 Batch 핸들 작업을 지정할 수 있습니다. 예를 들어 Batch .NET API를 사용하여 작업 예약을 사용하지 않도록 설정하는 경우 DisableComputeNodeSchedulingOption에 대한 열거형 값을 지정할 수 있습니다. 다음을 선택할 수 있습니다.

  • 실행 중인 작업을 종료합니다. Terminate
  • 다른 노드에서 예약하기 위한 작업을 재큐잉합니다. Requeue
  • 작업을 수행하기 전에 실행 중인 작업이 완료되도록 허용합니다. TaskCompletion

오류 후 다시 시도

Batch API는 오류에 대해 알립니다. 기본 제공 전역 재시도 처리기를 사용하여 모든 API를 다시 시도할 수 있습니다. 이 옵션을 사용하는 것이 가장 좋습니다.

오류가 발생한 후 다시 시도하기 전에 몇 초 정도 기다립니다. 너무 자주 또는 너무 빨리 다시 시도하는 경우 재시도 처리기는 요청을 제한합니다.

다음 단계