Obsługa i wykrywanie błędów w usłudze Azure Batch

Czasami może być konieczne obsłużenie błędów zadań i aplikacji w rozwiązaniu Azure Batch. W tym artykule opisano różne typy błędów usługi Batch oraz sposób rozwiązywania typowych problemów.

Kody błędów

Niektóre ogólne typy błędów, które mogą być widoczne w usłudze Batch, to:

  • Błędy sieci dla żądań, które nigdy nie dotarły do usługi Batch, lub błędy sieci, gdy odpowiedź usługi Batch nie dotarła do klienta w czasie.
  • Wewnętrzne błędy serwera. Te błędy mają standardowy 5xx kod stanu odpowiedź HTTP.
  • Błędy związane z ograniczaniem przepustowości. Te błędy obejmują 429 odpowiedzi HTTP lub 503 kod stanu z nagłówkiem Retry-after .
  • 4xx błędy, takie jak AlreadyExists i InvalidOperation. Te błędy wskazują, że zasób nie jest w prawidłowym stanie przejścia stanu.

Aby uzyskać szczegółowe informacje na temat określonych kodów błędów, zobacz Kody stanu i błędów usługi Batch. Ta dokumentacja obejmuje kody błędów dla interfejsu API REST, usługi Batch oraz zadań i planowania zadań.

Błędy aplikacji

Podczas wykonywania aplikacja może wygenerować dane wyjściowe diagnostyczne. Tych danych wyjściowych można użyć do rozwiązywania problemów. Usługa Batch zapisuje standardowe dane wyjściowe i standardowe dane wyjściowe błędów do plikówstdout.txt i stderr.txt w katalogu zadań w węźle obliczeniowym. Aby uzyskać więcej informacji, zobacz Pliki i katalogi w usłudze Batch.

Aby pobrać te pliki wyjściowe, użyj Azure Portal lub jednego z zestawów SDK usługi Batch. Aby na przykład pobrać pliki na potrzeby rozwiązywania problemów, użyj elementów ComputeNode.GetNodeFile i CloudTask.GetNodeFile w bibliotece .NET usługi Batch.

Błędy zadań

Błędy zadań można podzielić na kilka kategorii.

Błędy przetwarzania wstępnego

Jeśli nie można uruchomić zadania, dla tego zadania zostanie ustawiony błąd przetwarzania wstępnego. Błędy przetwarzania wstępnego mogą wystąpić, jeśli:

  • Pliki zasobów zadania zostały przeniesione.
  • Konto magazynu nie jest już dostępne.
  • Wystąpił inny problem, który uniemożliwił pomyślne skopiowanie plików do węzła.

Błędy przekazywania plików

Jeśli pliki określone dla zadania nie zostaną przekazane z jakiegokolwiek powodu, dla zadania zostanie ustawiony błąd przekazywania pliku. Błędy przekazywania plików mogą wystąpić, jeśli:

  • Token sygnatury dostępu współdzielonego (SAS) dostarczony do uzyskiwania dostępu do usługi Azure Storage jest nieprawidłowy.
  • Token SAS nie zapewnia uprawnień do zapisu.
  • Konto magazynu nie jest już dostępne.
  • Wystąpił inny problem, który uniemożliwił pomyślne skopiowanie plików z węzła.

Błędy aplikacji

Proces określony przez wiersz polecenia zadania może również zakończyć się niepowodzeniem. Aby uzyskać więcej informacji, zobacz Task exit codes (Kody zakończenia zadania).

W przypadku błędów aplikacji skonfiguruj usługę Batch, aby automatycznie ponowić próbę wykonania zadania maksymalnie określoną liczbę razy.

Błędy ograniczeń

Aby określić maksymalny czas trwania wykonywania zadania lub zadania, ustaw maxWallClockTime ograniczenie. To ustawienie służy do kończenie zadań, których nie można wykonać.

Gdy zadanie przekracza maksymalny czas:

  • Zadanie jest oznaczone jako ukończone.
  • Kod zakończenia jest ustawiony na 0xC000013Awartość .
  • Pole schedulingError jest oznaczone jako { category:"ServerError", code="TaskEnded"}.

Kody zakończenia zadania podrzędnego

Gdy zadanie podrzędne wykonuje proces, usługa Batch wypełnia właściwości kodu zakończenia zadania podrzędnego przy użyciu zwracanego kodu procesu. Jeśli proces zwraca kod zakończenia niezerowy, usługa Batch oznacza zadanie jako niepowodzenie.

Usługa Batch nie określa kodu zakończenia zadania. Sam proces lub system operacyjny, na którym jest wykonywany proces, określa kod zakończenia.

Błędy lub przerwy w zadaniach

Od czasu do czasu zadania podrzędne mogą zakończyć się niepowodzeniem lub zostać przerwane. Na przykład:

  • Sama aplikacja zadania może zakończyć się niepowodzeniem.
  • Węzeł, na którym jest uruchomione zadanie, może zostać uruchomiony ponownie.
  • Operacja zmiany rozmiaru może usunąć węzeł z puli. Ta akcja może wystąpić, jeśli zasady cofania przydziału puli natychmiast usuwają węzły bez oczekiwania na zakończenie zadań.

We wszystkich przypadkach usługa Batch może automatycznie ponownie kolejkować zadanie do wykonania w innym węźle.

Istnieje również możliwość sporadycznego problemu, aby spowodować, że zadanie przestanie odpowiadać lub trwa zbyt długo. Można ustawić maksymalny interwał wykonywania zadania. Jeśli zadanie przekroczy interwał, usługa Batch przerywa aplikację zadań.

Łączenie z węzłami obliczeniowymi

Debugowanie i rozwiązywanie problemów można wykonać, logując się zdalnie do węzła obliczeniowego. Użyj Azure Portal, aby pobrać plik protokołu RDP (Remote Desktop Protocol) dla węzłów systemu Windows i uzyskać informacje o połączeniu protokołu Secure Shell (SSH) dla węzłów systemu Linux. Te informacje można również pobrać przy użyciu interfejsów API platformy .NET usługi Batch lub usługi Batch dla języka Python .

Aby nawiązać połączenie z węzłem za pośrednictwem protokołu RDP lub SSH, najpierw utwórz użytkownika w węźle. Użyj jednej z poniższych metod:

W razie potrzeby skonfiguruj lub wyłącz dostęp do węzłów obliczeniowych.

Rozwiązywanie problemów z węzłami

Aplikacja lub usługa kliencka usługi Batch może zbadać metadane zadań, które zakończyły się niepowodzeniem, aby zidentyfikować węzeł problemu. Każdy węzeł w puli ma unikatowy identyfikator. Metadane zadania obejmują węzeł, w którym jest uruchamiane zadanie. Po znalezieniu węzła problemu spróbuj wykonać następujące metody, aby rozwiązać problem.

Ponowne uruchamianie węzła

Ponowne uruchomienie węzła czasami rozwiązuje ukryte problemy, takie jak zablokowane lub awarie procesów. Jeśli pula używa zadania podrzędnego uruchamiania lub zadanie używa zadania podrzędnego przygotowania zadania, ponowne uruchomienie węzła wykonuje te zadania.

Węzeł z obrazem

Ponowne utworzenie węzła umożliwia ponowne zainstalowanie systemu operacyjnego. Uruchom zadania podrzędne i zadania podrzędne przygotowania zadania ponownie po ponownym odtworzeniu.

Usuwanie węzła z puli

Usunięcie węzła z puli jest czasami konieczne.

Wyłączanie planowania zadań w węźle

Wyłączenie planowania zadań w węźle skutecznie przełącza węzeł w tryb offline. Usługa Batch nie przypisuje żadnych dalszych zadań do węzła. Jednak węzeł nadal działa w puli. Następnie można dokładniej zbadać błędy bez utraty danych zadania, które zakończyło się niepowodzeniem. Węzeł nie spowoduje również większej liczby niepowodzeń zadań.

Na przykład wyłącz planowanie zadań w węźle. Następnie zaloguj się zdalnie do węzła. Sprawdź dzienniki zdarzeń i wykonaj inne kroki rozwiązywania problemów. Po rozwiązaniu problemów włącz ponownie planowanie zadań, aby przywrócić węzeł w trybie online.

Za pomocą tych akcji można określić, że usługa Batch obsługuje zadania aktualnie uruchomione w węźle. Na przykład po wyłączeniu planowania zadań za pomocą interfejsu API platformy .NET usługi Batch można określić wartość wyliczenia disableComputeNodeSchedulingOption. Możesz:

  • Kończenie uruchamiania zadań: Terminate
  • Ponowne kolejkowanie zadań do planowania w innych węzłach: Requeue
  • Zezwalaj na wykonywanie uruchomionych zadań przed wykonaniem akcji: TaskCompletion

Ponów próbę po błędach

Interfejsy API usługi Batch powiadamiają o błędach. Możesz ponowić próbę wszystkich interfejsów API przy użyciu wbudowanej procedury obsługi ponawiania prób globalnych. Najlepszym rozwiązaniem jest użycie tej opcji.

Po awarii poczekaj kilka sekund przed ponowieniem próby. Jeśli ponowisz próbę zbyt często lub zbyt szybko, program obsługi ponawia próby ogranicza żądania.

Następne kroki