Hantering och identifiering av fel i Azure Batch
Ibland kan du behöva hantera aktivitets- och programfel i din Azure Batch lösning. Den här artikeln beskriver olika typer av Batch-fel och hur du löser vanliga problem.
Några allmänna typer av fel som du kan se i Batch är:
- Nätverksfel för begäranden som aldrig nådde Batch eller nätverksfel när Batch-svaret inte nådde klienten i tid.
- Interna serverfel. De här felen har ett HTTP-svar med standardstatuskod
5xx
. - Begränsningsrelaterade fel. Dessa fel inkluderar
429
eller503
statuskod HTTP-svar medRetry-after
huvudet. -
4xx
fel somAlreadyExists
ochInvalidOperation
. Dessa fel indikerar att resursen inte är i rätt tillstånd för tillståndsövergången.
Detaljerad information om specifika felkoder finns i Batch-status och felkoder. Den här referensen innehåller felkoder för REST API, Batch-tjänsten och för jobbuppgifter och schemaläggning.
Under körningen kan ett program generera diagnostiska utdata. Du kan använda dessa utdata för att felsöka problem. Batch-tjänsten skriver standardutdata och standardfelutdata till stdout.txt - och stderr.txt-filerna i aktivitetskatalogen på beräkningsnoden. Mer information finns i Filer och kataloger i Batch.
Om du vill ladda ned dessa utdatafiler använder du Azure Portal eller någon av Batch-SDK:erna. Om du till exempel vill hämta filer i felsökningssyfte använder du ComputeNode.GetNodeFile och CloudTask.GetNodeFile i Batch .NET-biblioteket.
Aktivitetsfel hamnar i flera kategorier.
Om det inte går att starta en aktivitet anges ett förbearbetningsfel för aktiviteten. Förbearbetningsfel kan inträffa om:
- Aktivitetens resursfiler har flyttats.
- Lagringskontot är inte längre tillgängligt.
- Ett annat problem inträffade som förhindrade en lyckad kopiering av filer till noden.
Om filer som du har angett för en aktivitet inte kan laddas upp av någon anledning anges ett filöverföringsfel för uppgiften. Filuppladdningsfel kan inträffa om:
- Den SAS-token (signatur för delad åtkomst) som angetts för åtkomst till Azure Storage är ogiltig.
- SAS-token ger inte skrivbehörighet.
- Lagringskontot är inte längre tillgängligt.
- Ett annat problem inträffade som förhindrade en lyckad kopiering av filer från noden.
Processen som definieras av aktivitetens kommandorad kan också misslyckas. Mer information finns i Aktivitetsavslutskoder.
För programfel konfigurerar du Batch för att automatiskt försöka utföra uppgiften igen upp till ett angivet antal gånger.
Ange den maximala körningstiden för ett jobb eller en aktivitet genom att ange villkoret maxWallClockTime
. Använd den här inställningen om du vill avsluta aktiviteter som inte kan utföras.
När aktiviteten överskrider den maximala tiden:
- Uppgiften markeras som slutförd.
- Slutkoden är inställd på
0xC000013A
. - Fältet schedulingError är markerat som
{ category:"ServerError", code="TaskEnded"}
.
När en aktivitet kör en process lägger Batch till processens returkod i aktivitetens slutkodsegenskap. Om processen returnerar en icke-nollavslutskod markerar Batch-tjänsten uppgiften som misslyckad.
Batch-tjänsten fastställer inte en aktivitets slutkod. Själva processen, eller operativsystemet som processen körs på, avgör slutkoden.
Aktiviteter kan ibland misslyckas eller avbrytas. Ett exempel:
- Själva aktivitetsprogrammet kan misslyckas.
- Noden som aktiviteten körs på kan startas om.
- En storleksändringsåtgärd kan ta bort noden från poolen. Den här åtgärden kan inträffa om poolens frigöringsprincip tar bort noder omedelbart utan att vänta på att aktiviteterna ska slutföras.
I samtliga fall kan Batch automatiskt skicka om uppgiften för körning på en annan nod.
Det är också möjligt att ett tillfälligt problem gör att en uppgift slutar svara eller tar för lång tid att köra. Du kan ange ett maximalt körningsintervall för en aktivitet. Om en aktivitet överskrider intervallet avbryter Batch-tjänsten aktivitetsprogrammet.
Du kan utföra felsökning och felsökning genom att logga in på en beräkningsnod via en fjärranslutning. Använd Azure Portal för att ladda ned en RDP-fil (Remote Desktop Protocol) för Windows-noder och hämta SSH-anslutningsinformation (Secure Shell) för Linux-noder. Du kan också ladda ned den här informationen med hjälp av Batch .NET - eller Batch Python-API :er.
Om du vill ansluta till en nod via RDP eller SSH skapar du först en användare på noden. Använd en av följande metoder:
- Azure Portal
- Batch REST API: adduser
- Batch .NET API: ComputeNode.CreateComputeNodeUser
- Batch Python-modul: add_user
Om det behövs konfigurerar eller inaktiverar du åtkomst till beräkningsnoder.
Batch-klientprogrammet eller -tjänsten kan undersöka metadata för misslyckade uppgifter för att identifiera en problemnod. Varje nod i en pool har ett unikt ID. Uppgiftsmetadata innehåller noden där en aktivitet körs. När du har hittat problemnoden provar du följande metoder för att lösa felet.
Omstart av en nod åtgärdar ibland latenta problem, till exempel fastnade eller kraschade processer. Om poolen använder en startaktivitet, eller om jobbet använder en jobbförberedelseaktivitet, kör en nodomstart dessa uppgifter.
- Batch REST API: reboot
- Batch .NET API: ComputeNode.Reboot
Om du återskapar en nod installeras operativsystemet om. Startaktiviteter och jobbförberedelseaktiviteter körs igen när omimeringen har inträffar.
- Batch REST API: återskapa
- Batch .NET API: ComputeNode.Reimage
Ibland är det nödvändigt att ta bort noden från poolen.
- Batch REST API: removenodes
- Batch .NET API: PoolOperations
Om du inaktiverar schemaläggning av aktiviteter på en nod kopplas noden effektivt från. Batch tilldelar inga ytterligare uppgifter till noden. Noden fortsätter dock att köras i poolen. Du kan sedan undersöka felen ytterligare utan att förlora den misslyckade aktivitetens data. Noden orsakar inte heller fler aktivitetsfel.
Inaktivera till exempel aktivitetsschemaläggning på noden. Logga sedan in på noden via fjärranslutning. Granska händelseloggarna och utför annan felsökning. När du har löst problemen aktiverar du aktivitetsschemaläggning igen för att få noden online igen.
- Batch REST API: enablescheduling
- Batch .NET API: ComputeNode.EnableScheduling
Du kan använda dessa åtgärder för att ange batchreferenser som körs på noden. När du till exempel inaktiverar aktivitetsschemaläggning med Batch .NET API kan du ange ett uppräkningsvärde för DisableComputeNodeSchedulingOption. Du kan välja att:
- Avsluta aktiviteter som körs:
Terminate
- Fråga om uppgifter för schemaläggning på andra noder:
Requeue
- Tillåt att aktiviteter som körs slutförs innan åtgärden utförs:
TaskCompletion
Batch-API:erna meddelar dig om fel. Du kan försöka igen med hjälp av den inbyggda globala återförsökshanteraren. Det är bästa praxis att använda det här alternativet.
Efter ett fel väntar du flera sekunder innan du försöker igen. Om du försöker igen för ofta eller för snabbt begränsar återförsökshanteraren begäranden.