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 lub503
kod stanu z nagłówkiemRetry-after
. -
4xx
błędy, takie jakAlreadyExists
iInvalidOperation
. 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
0xC000013A
wartość . - 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:
- Azure Portal
- Interfejs API REST usługi Batch: adduser
- Interfejs API platformy .NET usługi Batch: ComputeNode.CreateComputeNodeUser
- Moduł usługi Batch dla języka Python: add_user
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.
- Interfejs API REST usługi Batch: ponowny rozruch
- Interfejs API platformy .NET usługi Batch: ComputeNode.Reboot
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.
- Interfejs API REST usługi Batch: reimage
- Interfejs API .NET usługi Batch: ComputeNode.Reimage
Usuwanie węzła z puli
Usunięcie węzła z puli jest czasami konieczne.
- Interfejs API REST usługi Batch: removenodes
- Interfejs API platformy .NET usługi Batch: PoolOperations
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.
- Interfejs API REST usługi Batch: enablescheduling
- Interfejs API platformy .NET usługi Batch: ComputeNode.EnableScheduling
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.