Sdílet prostřednictvím


Zpracování a detekce chyb ve službě Azure Batch

Někdy možná budete muset zpracovávat selhání úloh a aplikací v řešení Azure Batch. Tento článek vysvětluje různé typy chyb služby Batch a způsob řešení běžných problémů.

Kódy chyb

Mezi obecné typy chyb, které se můžou zobrazit ve službě Batch, patří:

  • Síťové chyby u požadavků, které nikdy nedosáhly ke službě Batch, nebo síťová selhání, když odpověď Batch nedorazila včas ke klientovi.
  • Vnitřní chyby serveru Tyto chyby mají standardní HTTP odpověď stavového kódu 5xx.
  • Chyby související s omezováním Mezi tyto chyby patří HTTP odpovědi se stavovým kódem 429 a hlavičkou 503Retry-after.
  • 4xx chyby, jako jsou AlreadyExists a InvalidOperation. Tyto chyby značí, že prostředek není ve správném stavu pro přechod stavu.

Podrobné informace o konkrétních kódech chyb najdete v tématu Stav služby Batch a kódy chyb. Tento odkaz obsahuje kódy chyb pro rozhraní REST API, službu Batch a pro úlohy a plánování úloh.

Selhání aplikace

Během provádění může aplikace vytvořit diagnostický výstup. Tento výstup můžete použít k řešení problémů. Služba Batch zapíše standardní výstup a standardní chybový výstup do souborůstdout.txt a stderr.txt v adresáři úloh na výpočetním uzlu. Další informace najdete v tématu Soubory a adresáře ve službě Batch.

Pokud chcete tyto výstupní soubory stáhnout, použijte Azure Portal nebo některou ze sad SDK služby Batch. Pokud chcete například načíst soubory pro účely řešení potíží, použijte computeNode.GetNodeFile a CloudTask.GetNodeFile v knihovně Batch .NET.

Chyby úkolů

Chyby úkolů spadají do několika kategorií.

Chyby předběžného zpracování

Pokud se úkolu nepodaří spustit, nastaví se pro úkol chyba předběžného zpracování. K chybám předběžného zpracování může dojít v následujících případech:

  • Soubory zdrojů úkolu se přesunuly.
  • Účet úložiště už není k dispozici.
  • Došlo k dalšímu problému, který zabránil úspěšnému kopírování souborů do uzlu.

Chyby nahrávání souborů

Pokud soubory, které jste zadali pro úlohu, se z nějakého důvodu nepodaří nahrát, nastaví se pro úkol chyba nahrávání souboru. K chybám nahrávání souborů může dojít v následujících případech:

  • Token sdíleného přístupového podpisu (SAS) zadaný pro přístup ke službě Azure Storage je neplatný.
  • Token SAS neposkytuje oprávnění k zápisu.
  • Účet úložiště už není k dispozici.
  • Došlo k dalšímu problému, který zabránil úspěšnému kopírování souborů z uzlu.

Chyby aplikace

Proces určený příkazovým řádkem úkolu může také selhat. Další informace naleznete v tématu Ukončovací kódy úkolů.

V případě chyb aplikace nakonfigurujte službu Batch tak, aby automaticky zkusila úlohu až do zadaného počtu opakování.

Chyby omezení

Chcete-li zadat maximální dobu trvání provádění pro úlohu nebo úlohu, nastavte maxWallClockTime omezení. Toto nastavení použijte pro ukončení úkolů, které nepostupují.

Pokud úkol překročí maximální dobu:

  • Úkol je označený jako dokončený.
  • Ukončovací kód je nastaven na 0xC000013A.
  • Pole schedulingError je označeno jako { category:"ServerError", code="TaskEnded"}.

Ukončovací kódy úkolů

Když úloha spustí proces, služba Batch vyplní vlastnost ukončovacího kódu úkolu návratovým kódem procesu. Pokud proces vrátí nenulový ukončovací kód, služba Batch označí úlohu jako neúspěšnou.

Služba Batch neurčuje ukončovací kód úkolu. Samotný proces nebo operační systém, na kterém se proces spouští, určuje ukončovací kód.

Selhání nebo přerušení úloh

Úkoly můžou občas selhat nebo být přerušeny. Například:

  • Samotná aplikace úlohy může selhat.
  • Uzel, na kterém je úloha spuštěná, se může restartovat.
  • Operace změny velikosti může odebrat uzel z fondu. K této akci může dojít, pokud deallocační politika fondu odebere uzly okamžitě, aniž by čekala na dokončení úkolů.

Ve všech případech může služba Batch automaticky znovu spustit úlohu na jiném uzlu.

Je také možné, že přerušovaný problém způsobí, že úloha přestane reagovat nebo trvá příliš dlouho. Pro úlohu můžete nastavit maximální interval provádění. Pokud úkol překročí interval, služba Batch přeruší aplikaci úkolu.

Připojení k výpočetním uzlům

Ladění a řešení potíží můžete provést vzdáleným přihlášením k výpočetnímu uzlu. Pomocí webu Azure Portal stáhněte soubor protokolu RDP (Remote Desktop Protocol) pro uzly Windows a získejte informace o připojení SSH (Secure Shell) pro uzly Linuxu. Tyto informace si můžete stáhnout také pomocí rozhraní API batch .NET nebo Batch Pythonu .

Pokud se chcete připojit k uzlu přes protokol RDP nebo SSH, nejprve na uzlu vytvořte uživatele. Použijte jednu z následujících metod:

V případě potřeby nakonfigurujte nebo zakažte přístup k výpočetním uzlům.

Řešení problémových uzlů

Klientská aplikace nebo služba Batch může prozkoumat metadata neúspěšných úloh a identifikovat problémový uzel. Každý uzel ve fondu má jedinečné ID. Metadata úloh zahrnují uzel, na kterém se úloha spouští. Jakmile zjistíte problémový uzel, zkuste vyřešit selhání následujícími metodami.

Restartování uzlu

Restartování uzlu někdy řeší latentní problémy, jako jsou zablokované nebo chybové procesy. Pokud váš fond používá spouštěcí úkol nebo vaše úloha používá úkol přípravy úlohy, restartování uzlu tyto úkoly provede.

Přeinstalovat uzel

Obnova obrazu uzlu přeinstaluje operační systém. Úkoly a úkoly přípravy úloh se spustí znovu po přeinstalování systému.

Odebrání uzlu z fondu

Odebrání uzlu z fondu je někdy nezbytné.

Zakázání plánování úkolů na uzlu

Zakázání plánování úkolů na uzlu efektivně přenese uzel do režimu offline. Služba Batch nepřiřazuje k uzlu žádné další úkoly. Uzel však pokračuje v běhu ve fondu. Pak můžete dále prošetřit chyby, aniž byste ztratili data neúspěšného úkolu. Uzel také nezpůsobí další selhání úloh.

Například zakažte plánování úkolů na uzlu. Pak se přihlaste k uzlu vzdáleně. Prozkoumejte protokoly událostí a proveďte další řešení potíží. Jakmile problémy vyřešíte, povolte znovu plánování úkolů, aby se uzel vrátil do režimu online.

Pomocí těchto akcí můžete určit, jak služba Batch zpracovává úlohy, které právě běží na uzlu. Pokud například zakážete plánování úkolů pomocí rozhraní Batch .NET API, můžete zadat enum hodnotu pro DisableComputeNodeSchedulingOption. Můžete zvolit, zda chcete:

  • Ukončení spuštěných úloh: Terminate
  • Znovuzařazení úkolů do fronty pro naplánování na jiných uzlech: Requeue
  • Před provedením akce povolte dokončení spuštěných úkolů: TaskCompletion

Opakování po chybách

Rozhraní API služby Batch vás upozorní na selhání. Všechna rozhraní API můžete znovu spustit pomocí integrované globální rutiny pro opakování. Tato možnost je osvědčeným postupem.

Po selhání počkejte několik sekund před opakováním. Pokud se opakování opakuje příliš často nebo příliš rychle, obslužná rutina opakování omezuje požadavky.

Další kroky