Udostępnij za pośrednictwem


Błędy puli i węzła usługi Azure Batch

Niektóre operacje tworzenia puli usługi Azure Batch i zarządzania są wykonywane natychmiast. Wykrywanie błędów dla tych operacji jest proste, ponieważ błędy zwykle zwracają się natychmiast z interfejsu API, wiersza polecenia lub interfejsu użytkownika. Jednak niektóre operacje są asynchroniczne, uruchamiane w tle i trwają kilka minut. W tym artykule opisano sposoby wykrywania i unikania błędów, które mogą wystąpić w operacjach w tle dla pul i węzłów.

Upewnij się, że aplikacje mają zaimplementować kompleksowe sprawdzanie błędów, szczególnie w przypadku operacji asynchronicznych. Kompleksowe sprawdzanie błędów może pomóc w szybkiej identyfikacji i diagnozowaniu problemów.

Błędy puli

Błędy puli mogą być związane z przekroczeniem limitu czasu zmiany rozmiaru lub niepowodzeniem, automatycznym niepowodzeniem skalowania lub niepowodzeniem usuwania puli.

Zmienianie limitu czasu lub niepowodzenia

Podczas tworzenia nowej puli lub zmieniania rozmiaru istniejącej puli należy określić docelową liczbę węzłów. Operacja tworzenia lub zmiany rozmiaru jest wykonywana natychmiast, ale rzeczywista alokacja nowych węzłów lub usunięcie istniejących węzłów może potrwać kilka minut. Limit czasu zmiany rozmiaru można określić w interfejsach API puli — dodawanie lub pula — zmienianie rozmiaru interfejsów API. Jeśli usługa Batch nie może przydzielić docelowej liczby węzłów w okresie przekroczenia limitu czasu zmiany rozmiaru, pula przechodzi w stały stan i zgłasza błędy zmiany rozmiaru.

Właściwość resizeError zawiera listę błędów, które wystąpiły podczas najnowszej oceny.

Typowe przyczyny błędów zmiany rozmiaru to:

  • Zmień rozmiar limitu czasu za krótki. Zazwyczaj domyślny limit czasu 15 minut jest wystarczająco długi, aby przydzielić lub usunąć węzły puli. Jeśli przydzielasz dużą liczbę węzłów, takich jak ponad 1000 węzłów z obrazu witryny Azure Marketplace lub więcej niż 300 węzłów z niestandardowego obrazu maszyny wirtualnej, możesz ustawić limit czasu zmiany rozmiaru na 30 minut.

  • Niewystarczający limit przydziału rdzeni. Konto usługi Batch jest ograniczone w liczbie rdzeni, które może przydzielić we wszystkich pulach, i zatrzymuje przydzielanie węzłów po osiągnięciu tego limitu przydziału. Możesz zwiększyć limit przydziału rdzeni, aby usługa Batch mogła przydzielić więcej węzłów. Aby uzyskać więcej informacji, zobacz Batch service quotas and limits (Limity i limity usługi Batch).

  • Niewystarczające adresy IP podsieci, gdy pula znajduje się w sieci wirtualnej. Podsieć sieci wirtualnej musi mieć wystarczającą liczbę adresów IP do przydzielenia do każdego żądanego węzła puli. W przeciwnym razie węzły nie zostaną utworzone. Aby uzyskać więcej informacji, zobacz Tworzenie puli usługi Azure Batch w sieci wirtualnej.

  • Niewystarczające zasoby, gdy pula znajduje się w sieci wirtualnej. Podczas tworzenia puli w sieci wirtualnej możesz utworzyć zasoby, takie jak moduły równoważenia obciążenia, publiczne adresy IP i sieciowe grupy zabezpieczeń (NSG) w tej samej subskrypcji co konto usługi Batch. Upewnij się, że limity przydziału subskrypcji są wystarczające dla tych zasobów.

  • Duże pule z niestandardowymi obrazami maszyn wirtualnych. Duże pule korzystające z niestandardowych obrazów maszyn wirtualnych mogą trwać dłużej i mogą wystąpić przekroczenia limitu czasu zmiany rozmiaru. Aby uzyskać zalecenia dotyczące limitów i konfiguracji, zobacz Tworzenie puli za pomocą galerii obliczeń platformy Azure.

Błędy automatycznego skalowania

Usługę Azure Batch można ustawić tak, aby automatycznie skalowała liczbę węzłów w puli, a parametry dla formuły automatycznego skalowania dla puli. Następnie usługa Batch używa formuły do okresowej oceny liczby węzłów w puli i ustawiania nowych liczb docelowych. Aby uzyskać więcej informacji, zobacz Tworzenie automatycznej formuły skalowania węzłów obliczeniowych w puli usługi Batch.

Podczas korzystania z automatycznego skalowania mogą wystąpić następujące problemy:

  • Automatyczna ocena skalowania kończy się niepowodzeniem.
  • Wynikowa operacja zmiany rozmiaru kończy się niepowodzeniem i upłynął limit czasu.
  • Problem z formułą automatycznego skalowania prowadzi do nieprawidłowych wartości docelowych węzła. Zmiana rozmiaru może działać lub upłynął limit czasu.

Aby uzyskać informacje o ostatniej automatycznej ocenie skalowania, użyj właściwości autoScaleRun . Ta właściwość raportuje czas oceny, wartości i wynik oraz wszelkie błędy wydajności.

Pełne zdarzenie zmiany rozmiaru puli przechwytuje informacje o wszystkich ocenach.

Błędy usuwania puli

Aby usunąć pulę zawierającą węzły, usługa Batch najpierw usunie węzły, co może potrwać kilka minut. Następnie usługa Batch usuwa sam obiekt puli.

Usługa Batch ustawia wartość poolState na deleting wartość podczas procesu usuwania. Aplikacja wywołująca może wykryć, czy usunięcie puli trwa zbyt długo, używając state właściwości i stateTransitionTime .

Jeśli usuwanie puli trwa dłużej niż oczekiwano, usługa Batch okresowo ponawia próbę do momentu pomyślnego usunięcia puli. W niektórych przypadkach opóźnienie jest spowodowane awarią usługi platformy Azure lub innymi tymczasowymi problemami. Inne czynniki, które uniemożliwiają pomyślne usunięcie puli, mogą wymagać podjęcia działań w celu rozwiązania problemu. Te czynniki mogą obejmować następujące problemy:

  • Blokady zasobów mogą być umieszczane w zasobach utworzonych przez usługę Batch lub w zasobach sieciowych używanych przez usługę Batch.

  • Utworzone zasoby mogą zależeć od utworzonego zasobu usługi Batch. Jeśli na przykład tworzysz pulę w sieci wirtualnej, usługa Batch tworzy sieciową grupę zabezpieczeń, publiczny adres IP i moduł równoważenia obciążenia. Jeśli używasz tych zasobów poza pulą, nie możesz usunąć puli.

  • Dostawca Microsoft.Batch zasobów może zostać wyrejestrowany z subskrypcji zawierającej pulę.

  • W przypadku kont Microsoft Azure Batch usługi Batch w trybie subskrypcji użytkownika może nie mieć już roli Współautor lub Właściciel subskrypcji zawierającej pulę. Aby uzyskać więcej informacji, zobacz Zezwalaj usłudze Batch na dostęp do subskrypcji.

Błędy węzła

Nawet jeśli usługa Batch pomyślnie przydziela węzły w puli, różne problemy mogą spowodować, że niektóre węzły będą w złej kondycji i nie mogą uruchamiać zadań. Te węzły nadal generują opłaty, dlatego ważne jest wykrywanie problemów, aby uniknąć płacenia za węzły, których nie można używać. Znajomość typowych błędów węzłów i znajomość bieżącego stanu zadania jest przydatna do rozwiązywania problemów.

Błędy uruchamiania zadań

Możesz określić opcjonalną wartość startTask dla puli. Podobnie jak w przypadku dowolnego zadania, zadanie podrzędne uruchamiania używa wiersza polecenia i może pobierać pliki zasobów z magazynu. Zadanie uruchamiania jest uruchamiane dla każdego węzła po uruchomieniu węzła. Właściwość waitForSuccess określa, czy usługa Batch czeka na pomyślne zakończenie zadania podrzędnego uruchamiania przed zaplanowaniem wszystkich zadań do węzła. Jeśli skonfigurujesz węzeł tak, aby czekał na pomyślne zakończenie zadania uruchamiania, ale zadanie uruchamiania zakończy się niepowodzeniem, węzeł nie będzie używany, ale nadal ponosi opłaty.

Błędy zadań uruchamiania można wykrywać przy użyciu właściwości węzła taskExecutionResult i taskFailureInformation najwyższego poziomu właściwości węzła startTaskInformation .

Niepowodzenie zadania uruchamiania powoduje również, że usługa Batch ustawić wartość computeNodeState na starttaskfailed, jeśli waitForSuccess ustawiono wartość true.

Podobnie jak w przypadku każdego zadania, może istnieć wiele przyczyn niepowodzenia zadania uruchamiania. Aby rozwiązać problemy, sprawdź pliki dziennika stdout, stderr i inne pliki dziennika specyficzne dla zadania.

Zadania podrzędne uruchamiania muszą zostać ponownie włączone, ponieważ zadanie podrzędne uruchamiania może być uruchamiane wiele razy w tym samym węźle, na przykład w przypadku ponownego odtworzenia lub ponownego uruchomienia węzła. W rzadkich przypadkach, gdy zadanie uruchamiania jest uruchamiane po wystąpieniu zdarzenia powoduje ponowne uruchomienie węzła, jeden system operacyjny lub efemeryczne obrazy dysku, a drugi nie. Ponieważ zadania podrzędne uruchamiania usługi Batch i wszystkie zadania usługi Batch są uruchamiane z dysku efemerycznego, zwykle nie jest to problem. Jednak w przypadkach, gdy zadanie uruchamiania instaluje aplikację na dysku systemu operacyjnego i przechowuje inne dane na dysku efemerycznym, mogą wystąpić problemy z synchronizacją. Odpowiednio chroń aplikację, jeśli używasz obu dysków.

Błąd pobierania pakietu aplikacji

Można określić co najmniej jeden pakiet aplikacji dla puli. Usługa Batch pobiera określone pliki pakietu do każdego węzła i usuwa pliki po uruchomieniu węzła, ale przed zaplanowaniem zadań. Często używa się polecenia podrzędnego uruchamiania z pakietami aplikacji, na przykład do kopiowania plików do innej lokalizacji lub uruchamiania konfiguracji.

Jeśli nie można pobrać i usunąć kompresji pakietu aplikacji, właściwość computeNodeError zgłasza błąd i ustawia stan węzła na unusable.

Niepowodzenie pobierania kontenera

Można określić co najmniej jedno odwołanie do kontenera w puli. Usługa Batch pobiera określone kontenery do każdego węzła. Jeśli nie można pobrać kontenera , właściwość computeNodeError zgłasza błąd i ustawia stan węzła na unusable.

Aktualizacje systemu operacyjnego Node

W przypadku pul enableAutomaticUpdates systemu Windows jest domyślnie ustawiona wartość true . Chociaż zalecane jest zezwolenie na aktualizacje automatyczne, aktualizacje mogą przerywać postęp zadań, zwłaszcza jeśli zadania są długotrwałe. Tę wartość można ustawić tak false , aby upewnić się, że aktualizacja systemu operacyjnego nie zostanie nieoczekiwanie wykonana.

Węzeł w stanie bezużytecznym

Usługa Batch może ustawić wartość computeNodeState z unusable wielu powodów. Nie można zaplanować zadań w węźle unusable , ale węzeł nadal ponosi opłaty.

Jeśli usługa Batch może określić przyczynę, właściwość computeNodeError zgłasza ją. Jeśli węzeł jest w unusable stanie, ale nie ma wartości computeNodeError, oznacza to, że usługa Batch nie może komunikować się z maszyną wirtualną. W takim przypadku usługa Batch zawsze próbuje odzyskać maszynę wirtualną. Jednak usługa Batch nie podejmuje automatycznej próby odzyskania maszyn wirtualnych, które nie mogły zainstalować pakietów aplikacji lub kontenerów, nawet jeśli ich stan to unusable.

Inne przyczyny węzłów mogą obejmować następujące przyczyny unusable :

  • Niestandardowy obraz maszyny wirtualnej jest nieprawidłowy. Na przykład obraz nie jest prawidłowo przygotowany.
  • Maszyna wirtualna jest przenoszona z powodu awarii infrastruktury lub uaktualnienia niskiego poziomu. Usługa Batch odzyskuje węzeł.
  • Obraz maszyny wirtualnej został wdrożony na sprzęcie, który go nie obsługuje.
  • Maszyny wirtualne znajdują się w sieci wirtualnej platformy Azure, a ruch został zablokowany do kluczowych portów.
  • Maszyny wirtualne znajdują się w sieci wirtualnej, ale ruch wychodzący do usługi Azure Storage jest blokowany.
  • Maszyny wirtualne znajdują się w sieci wirtualnej z niestandardową konfiguracją DNS, a serwer DNS nie może rozpoznać usługi Azure Storage.

Pliki dziennika agenta węzła

Proces agenta usługi Batch uruchamiany w każdym węźle puli udostępnia pliki dziennika, które mogą pomóc, jeśli musisz skontaktować się z pomocą techniczną dotyczącą problemu z węzłem puli. Pliki dziennika dla węzła można przekazać za pośrednictwem witryny Azure Portal, eksploratora usługi Batch lub węzła obliczeniowego — przekazywanie interfejsu API dzienników usługi Batch. Po przekazaniu i zapisaniu plików dziennika można usunąć węzeł lub pulę, aby zmniejszyć koszty uruchamiania węzłów.

Pełny dysk węzła

Usługa Batch używa dysku tymczasowego na maszynie wirtualnej puli węzłów do przechowywania plików, takich jak następujące pliki zadań, pliki zadań i pliki udostępnione:

  • Pliki pakietu aplikacji
  • Pliki zasobów zadań
  • Pliki specyficzne dla aplikacji pobrane do jednego z folderów usługi Batch
  • Pliki Stdout i stderr dla każdego wykonania aplikacji zadań
  • Pliki wyjściowe specyficzne dla aplikacji

Pliki takie jak pakiety aplikacji lub pliki zasobów zadań uruchamiania są zapisywane tylko raz, gdy usługa Batch tworzy węzeł puli. Mimo że zapisują tylko raz, jeśli te pliki są zbyt duże, mogą wypełnić dysk tymczasowy.

Inne pliki, takie jak stdout i stderr, są zapisywane dla każdego zadania uruchamianego przez węzeł. Jeśli duża liczba zadań jest uruchamiana w tym samym węźle lub pliki zadań są zbyt duże, mogą wypełnić dysk tymczasowy.

Węzeł potrzebuje również niewielkiej ilości miejsca na dysku systemu operacyjnego, aby utworzyć użytkowników po jego uruchomieniu.

Rozmiar dysku tymczasowego zależy od rozmiaru maszyny wirtualnej. Jedną z kwestii podczas wybierania rozmiaru maszyny wirtualnej jest zapewnienie, że dysk tymczasowy ma wystarczającą ilość miejsca na planowane obciążenie.

Po dodaniu puli w witrynie Azure Portal można wyświetlić pełną listę rozmiarów maszyn wirtualnych, w tym kolumnę Rozmiar dysku zasobu. Artykuły opisujące rozmiary maszyn wirtualnych zawierają tabele z kolumną Magazynu tymczasowego. Aby uzyskać więcej informacji, zobacz Rozmiary maszyn wirtualnych zoptymalizowanych pod kątem obliczeń. Aby zapoznać się z przykładową tabelą rozmiarów, zobacz Fsv2-series.

Można określić czas przechowywania plików zapisywanych przez każde zadanie. Czas przechowywania określa, jak długo mają być przechowywane pliki zadań przed ich automatycznym oczyszczeniem. Możesz skrócić czas przechowywania, aby zmniejszyć wymagania dotyczące magazynu.

Jeśli tymczasowy lub dysk systemu operacyjnego zabraknie miejsca lub jest bliski wyczerpania miejsca, węzeł zostanie przeniesiony do unusable obiektu computeNoteState, a błąd węzła wskazuje, że dysk jest pełny.

Jeśli nie masz pewności, co zajmuje miejsce w węźle, spróbuj połączyć się zdalnie z węzłem i ręcznie zbadać. Możesz również użyć interfejsu API File — List From Compute Node (Plik — lista z interfejsu API węzła obliczeniowego), aby zbadać pliki, na przykład dane wyjściowe zadania, w folderach zarządzanych w usłudze Batch. Ten interfejs API wyświetla tylko pliki w katalogach zarządzanych usługi Batch. Jeśli zadania utworzyły pliki w innym miejscu, ten interfejs API nie wyświetla ich.

Po upewnieniu się, że pobrać wszystkie potrzebne dane z węzła lub przekazać je do trwałego magazynu, możesz usunąć dane zgodnie z potrzebami, aby zwolnić miejsce.

Możesz usunąć stare ukończone zadania lub zadania, których dane zadań są nadal w węzłach. Zajrzyj do recentTasks kolekcji w zadaniuInformation w węźle lub użyj interfejsu API file — list from Compute Node API (Plik — lista z interfejsu API węzła obliczeniowego). Usunięcie zadania powoduje usunięcie wszystkich zadań w zadaniu. Usunięcie zadań w zadaniu powoduje usunięcie danych w katalogach zadań w węzłach i zwalnia miejsce. Po zwolnieniu wystarczającej ilości miejsca uruchom ponownie węzeł. Węzeł powinien wyprowadzić się ze unusable stanu i ponownie.idle

Aby odzyskać węzeł bezużyteczny w pulach VirtualMachineConfiguration , możesz usunąć węzeł z puli przy użyciu interfejsu API Puli — Usuń węzły . Następnie możesz ponownie zwiększyć pulę, aby zastąpić zły węzeł nowym.

Ważne

Funkcja Reimage nie jest obecnie obsługiwana w przypadku pul VirtualMachineConfiguration .

Następne kroki