Foutafhandeling en -detectie in Azure Batch
Soms moet u taak- en toepassingsfouten in uw Azure Batch-oplossing afhandelen. In dit artikel worden verschillende soorten Batch-fouten uitgelegd en wordt uitgelegd hoe u veelvoorkomende problemen kunt oplossen.
Foutcodes
Enkele algemene typen fouten die u in Batch kunt zien, zijn:
- Netwerkfouten voor aanvragen die Batch nooit hebben bereikt, of netwerkfouten wanneer het Batch-antwoord de client niet op tijd heeft bereikt.
- Interne serverfouten. Deze fouten hebben een HTTP-antwoord met een standaardstatuscode
5xx
. - Fouten met betrekking tot beperking. Deze fouten omvatten
429
HTTP-antwoorden of503
statuscode-antwoorden met deRetry-after
header. -
4xx
fouten zoalsAlreadyExists
enInvalidOperation
. Deze fouten geven aan dat de resource niet de juiste status heeft voor de statusovergang.
Zie Batchstatus en foutcodes voor gedetailleerde informatie over specifieke foutcodes. Deze naslaginformatie bevat foutcodes voor REST API, Batch-service en voor taaktaken en planning.
Toepassingsfouten
Tijdens de uitvoering kan een toepassing diagnostische uitvoer produceren. U kunt deze uitvoer gebruiken om problemen op te lossen. De Batch-service schrijft standaarduitvoer en standaardfoutuitvoer naar de stdout.txt - en stderr.txt-bestanden in de taakmap op het rekenknooppunt. Zie Bestanden en mappen in Batch voor meer informatie.
Als u deze uitvoerbestanden wilt downloaden, gebruikt u de Azure Portal of een van de Batch-SDK's. Als u bijvoorbeeld bestanden wilt ophalen voor probleemoplossingsdoeleinden, gebruikt u ComputeNode.GetNodeFile en CloudTask.GetNodeFile in de Batch .NET-bibliotheek.
Taakfouten
Taakfouten kunnen in verschillende categorieën worden onderverdeeld.
Voorverwerkingsfouten
Als een taak niet kan worden gestart, wordt een voorverwerkingsfout voor de taak ingesteld. Voorverwerkingsfouten kunnen optreden als:
- De resourcebestanden van de taak zijn verplaatst.
- Het opslagaccount is niet meer beschikbaar.
- Er is een ander probleem opgetreden waardoor het kopiëren van bestanden naar het knooppunt is verhinderd.
Fouten bij het uploaden van bestanden
Als bestanden die u voor een taak hebt opgegeven, om welke reden dan ook niet kunnen worden geüpload, wordt er een bestandsuploadfout ingesteld voor de taak. Fouten bij het uploaden van bestanden kunnen optreden als:
- Het SAS-token (Shared Access Signature) dat is opgegeven voor toegang tot Azure Storage is ongeldig.
- Het SAS-token biedt geen schrijfmachtigingen.
- Het opslagaccount is niet meer beschikbaar.
- Er is een ander probleem opgetreden waardoor het kopiëren van bestanden van het knooppunt is verhinderd.
Toepassingsfouten
Het proces dat door de opdrachtregel van de taak wordt opgegeven, kan ook mislukken. Zie Taakafsluitcodes voor meer informatie.
Voor toepassingsfouten configureert u Batch om de taak automatisch opnieuw uit te voeren tot een opgegeven aantal keren.
Beperkingsfouten
Als u de maximale uitvoeringsduur voor een taak of taak wilt opgeven, stelt u de beperking in maxWallClockTime
. Gebruik deze instelling om taken te beëindigen die niet worden uitgevoerd.
Wanneer de taak de maximale tijd overschrijdt:
- De taak is gemarkeerd als voltooid.
- De afsluitcode is ingesteld op
0xC000013A
. - Het veld schedulingError is gemarkeerd als
{ category:"ServerError", code="TaskEnded"}
.
Taakafsluitcodes
Wanneer een taak een proces uitvoert, vult Batch de retourcode van het proces als afsluitcode-eigenschap van de taak in. Als het proces een niet-nul afsluitcode retourneert, markeert de Batch-service de taak als mislukt.
De Batch-service bepaalt niet de afsluitcode van een taak. Het proces zelf, of het besturingssysteem waarop het proces wordt uitgevoerd, bepaalt de afsluitcode.
Taakfouten of onderbrekingen
Van tijd tot tijd kunnen taken mislukken of worden onderbroken. Bijvoorbeeld:
- De taaktoepassing zelf kan mislukken.
- Het knooppunt waarop de taak wordt uitgevoerd, kan opnieuw worden opgestart.
- Een bewerking voor het wijzigen van het formaat kan het knooppunt uit de pool verwijderen. Deze actie kan optreden als het deallocatiebeleid van de pool knooppunten onmiddellijk verwijdert zonder te wachten tot taken zijn voltooid.
In alle gevallen kan Batch de taak automatisch in de wachtrij plaatsen voor uitvoering op een ander knooppunt.
Het is ook mogelijk dat een onregelmatig probleem ervoor zorgt dat een taak niet meer reageert of dat het te lang duurt om uit te voeren. U kunt een maximaal uitvoeringsinterval voor een taak instellen. Als een taak het interval overschrijdt, onderbreekt de Batch-service de taaktoepassing.
Verbinding maken met rekenknooppunten
U kunt foutopsporing en probleemoplossing uitvoeren door u op afstand aan te melden bij een rekenknooppunt. Gebruik de Azure Portal om een RDP-bestand (Remote Desktop Protocol) voor Windows-knooppunten te downloaden en SSH-verbindingsgegevens (Secure Shell) voor Linux-knooppunten op te halen. U kunt deze informatie ook downloaden met behulp van de Batch .NET - of Batch Python-API's .
Als u verbinding wilt maken met een knooppunt via RDP of SSH, maakt u eerst een gebruiker op het knooppunt. Hanteer één van de volgende methoden:
- Azure Portal
- Batch REST API: adduser
- Batch .NET API: ComputeNode.CreateComputeNodeUser
- Batch Python-module: add_user
Configureer zo nodig de toegang tot rekenknooppunten of schakel deze uit.
Problemen met knooppunten oplossen
Uw Batch-clienttoepassing of -service kan de metagegevens van mislukte taken onderzoeken om een probleemknooppunt te identificeren. Elk knooppunt in een pool heeft een unieke id. Taakmetagegevens bevatten het knooppunt waar een taak wordt uitgevoerd. Nadat u het probleemknooppunt hebt gevonden, probeert u de volgende methoden om de fout op te lossen.
Knooppunt opnieuw opstarten
Het opnieuw opstarten van een knooppunt lost soms latente problemen op, zoals vastgelopen of vastgelopen processen. Als uw pool een begintaak gebruikt of als uw taak een taakvoorbereidingstaak gebruikt, worden deze taken uitgevoerd door een knooppunt opnieuw op te starten.
- Batch REST API: opnieuw opstarten
- Batch .NET API: ComputeNode.Reboot
Installatiekopie van knooppunt herstellen
Als u een knooppunt opnieuw installeert, wordt het besturingssysteem opnieuw geïnstalleerd. Starttaken en taakvoorbereidingstaken worden opnieuw uitgevoerd nadat het opnieuw is opgestart.
- Batch REST API: opnieuw installatiekopie
- Batch .NET API: ComputeNode.Reimage
Knooppunt uit pool verwijderen
Soms moet het knooppunt uit de pool worden verwijderd.
- Batch REST API: removenodes
- Batch .NET API: PoolOperations
Taakplanning op knooppunt uitschakelen
Als u taakplanning op een knooppunt uitschakelt, wordt het knooppunt effectief offline gehaald. Batch wijst geen verdere taken toe aan het knooppunt. Het knooppunt blijft echter actief in de pool. Vervolgens kunt u de fouten verder onderzoeken zonder de gegevens van de mislukte taak te verliezen. Het knooppunt veroorzaakt ook niet meer taakfouten.
Schakel bijvoorbeeld taakplanning uit op het knooppunt. Meld u vervolgens extern aan bij het knooppunt. Bekijk de gebeurtenislogboeken en voer andere probleemoplossing uit. Nadat u de problemen hebt opgelost, schakelt u taakplanning opnieuw in om het knooppunt weer online te brengen.
- Batch REST API: enablescheduling
- Batch .NET API: ComputeNode.EnableScheduling
U kunt deze acties gebruiken om Batch-taken op te geven die momenteel op het knooppunt worden uitgevoerd. Wanneer u bijvoorbeeld taakplanning uitschakelt met de Batch .NET API, kunt u een enum-waarde opgeven voor DisableComputeNodeSchedulingOption. U kunt als volgt kiezen:
- Actieve taken beëindigen:
Terminate
- Taken opnieuw in de wachtrij plaatsen voor planning op andere knooppunten:
Requeue
- Toestaan dat actieve taken worden voltooid voordat de actie wordt uitgevoerd:
TaskCompletion
Opnieuw proberen na fouten
De Batch-API's informeren u over fouten. U kunt alle API's opnieuw proberen met behulp van de ingebouwde algemene handler voor opnieuw proberen. Het is een best practice om deze optie te gebruiken.
Wacht na een fout enkele seconden voordat u het opnieuw probeert. Als u het te vaak of te snel opnieuw probeert, worden aanvragen door de handler voor opnieuw proberen beperkt.