Zpracování a zjišťování chyb v Azure Batch
Někdy může být potřeba vyřešit selhání úloh a aplikací ve vašem Azure Batch řešení. 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 ve službě Batch zobrazit, patří:
- Selhání sítě u požadavků, které nikdy nedosáhly do služby Batch, nebo selhání sítí, když odpověď služby Batch nedorazí do klienta včas.
- Vnitřní chyby serveru. Tyto chyby mají standardní
5xx
stavový kód odpovědi HTTP. - Chyby související s omezováním Mezi tyto chyby patří
429
odpovědi HTTP se stavovým kódem nebo503
s hlavičkouRetry-after
. -
4xx
AlreadyExists
například aInvalidOperation
. 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 Stavové kódy a kódy chyb služby Batch. Tento odkaz obsahuje kódy chyb pro rozhraní REST API, službu Batch a úlohy úloh a plánování.
Selhání aplikace
Během provádění může aplikace vytvořit výstup diagnostiky. Tento výstup můžete použít k řešení potíží. Služba Batch zapisuje standardní výstup a standardní chybový výstup do souborůstdout.txt a stderr.txt v adresáři úkolů na výpočetním uzlu. Další informace najdete v tématu Soubory a adresáře ve službě Batch.
Ke stažení těchto výstupních souborů 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íží, v knihovně Batch .NET použijte ComputeNode.GetNodeFile a CloudTask.GetNodeFile .
Chyby úloh
Chyby úkolů spadají do několika kategorií.
Chyby předběžného zpracování
Pokud úkol se nepodaří spustit, nastaví se pro něj 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 byly přesunuty.
- Účet úložiště už není dostupný.
- 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 se soubory, které jste zadali pro úkol, 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 k Azure Storage je neplatný.
- Token SAS neposkytuje oprávnění k zápisu.
- Účet úložiště už není dostupný.
- Došlo k dalšímu problému, který zabránil úspěšnému kopírování souborů z uzlu.
Chyby aplikace
Selhat může i proces zadaný pomocí příkazového řádku úkolu. Další informace najdete v tématu Ukončovací kódy úloh.
V případě chyb aplikace nakonfigurujte službu Batch tak, aby se úloha automaticky opakovat až po zadaný počet opakování.
Chyby omezení
Pokud chcete zadat maximální dobu provádění úlohy nebo úkolu, nastavte maxWallClockTime
omezení. Toto nastavení použijte k ukončení úloh, které se nedaří pokračovat.
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čené jako
{ category:"ServerError", code="TaskEnded"}
.
Ukončovací kódy úkolů
Pokud úkol 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, ve kterém se proces spouští, určuje ukončovací kód.
Selhání nebo přerušení úloh
Úkoly mohou 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 v případě, že zásady zrušení přidělení fondu okamžitě odeberou uzly bez čekání na dokončení úkolů.
Ve všech případech může služba Batch automaticky znovu nastavit úlohu do fronty ke spuštění na jiném uzlu.
Občasný problém také může způsobit, že úloha přestane reagovat nebo bude trvat 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í Azure Portal stáhněte soubor protokolu RDP (Remote Desktop Protocol) pro uzly s Windows a získejte informace o připojení SSH (Secure Shell) pro uzly s Linuxem. Tyto informace si můžete stáhnout také pomocí rozhraní Api pro Batch .NET nebo Batch Python .
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:
- Azure Portal
- Batch REST API: adduser
- Batch .NET API: ComputeNode.CreateComputeNodeUser
- Modul Batch Python: add_user
V případě potřeby nakonfigurujte nebo zakažte přístup k výpočetním uzlům.
Řešení potíží s problémové uzly
Vaše klientská aplikace nebo služba Batch může prozkoumat metadata neúspěšných úkolů a identifikovat problémový uzel. Každý uzel ve fondu má jedinečné ID. Metadata úlohy zahrnují uzel, na kterém se úloha spouští. Po nalezení problémového uzlu zkuste selhání vyřešit pomocí následujících metod.
Restartování uzlu
Restartováním uzlu se někdy vyřeší latentní problémy, jako jsou zablokované nebo chybové procesy. Pokud váš fond používá spouštěcí úkol nebo úloha používá úkol přípravy úlohy, provede restartování uzlu tyto úkoly.
- Batch REST API: restartování
- Batch .NET API: ComputeNode.Reboot
Obnovení uzlu z image
Při opětovném vytvoření uzlu se přeinstaluje operační systém. Spustit úkoly a úkoly přípravy úloh se znovu spustit po dokončení přepracování.
- Batch REST API: reimage
- Batch .NET API: ComputeNode.Reimage
Odebrání uzlu z fondu
Odebrání uzlu z fondu je někdy nezbytné.
- Batch REST API: removenodes
- Batch .NET API: PoolOperations
Zakázat plánování úkolů na uzlu
Zakázání plánování úkolů na uzlu ve skutečnosti přenese uzel do režimu offline. Služba Batch uzlu nepřiřazuje žádné další úkoly. Uzel ale bude ve fondu dál běžet. Pak můžete selhání dále prozkoumat, aniž byste přišli o data úlohy, která selhala. Uzel také nezpůsobí další selhání úloh.
Můžete například zakázat plánování úkolů na uzlu. Pak se vzdáleně přihlaste k uzlu. Prozkoumejte protokoly událostí a proveďte další řešení potíží. Po vyřešení problémů znovu povolte plánování úkolů, aby se uzel vrátil do online režimu.
- Batch REST API: povolení plánování
- Batch .NET API: ComputeNode.EnableScheduling
Pomocí těchto akcí můžete určit, že služba Batch zpracovává úlohy, které jsou aktuálně spuštěné na uzlu. Pokud například zakážete plánování úkolů pomocí rozhraní Batch .NET API, můžete zadat hodnotu výčtu pro DisableComputeNodeSchedulingOption. Můžete se rozhodnout pro následující:
- Ukončení spuštěných úloh:
Terminate
- Opětovné zařazení úkolů do fronty pro plánování na jiných uzlech:
Requeue
- Povolit dokončení spuštěných úloh před provedením akce:
TaskCompletion
Opakování po chybách
Rozhraní API služby Batch vás upozorní na selhání. Všechna rozhraní API můžete zkusit zopakovat pomocí integrované globální obslužné rutiny opakování. Tuto možnost je vhodné použít.
Po selhání počkejte několik sekund, než to zkusíte znovu. Pokud to budete opakovat příliš často nebo příliš rychle, obslužná rutina opakování omezí požadavky.