Delen via


Fouten in Azure Batch-pool en -knooppunten

Sommige bewerkingen voor het maken en beheren van Azure Batch-pools worden onmiddellijk uitgevoerd. Het detecteren van fouten voor deze bewerkingen is eenvoudig, omdat fouten meestal direct worden geretourneerd vanuit de API, de opdrachtregel of de gebruikersinterface. Sommige bewerkingen zijn echter asynchroon, worden uitgevoerd op de achtergrond en nemen enkele minuten in beslag. In dit artikel worden manieren beschreven om fouten te detecteren en te voorkomen die kunnen optreden in de achtergrondbewerkingen voor pools en knooppunten.

Zorg ervoor dat u uw toepassingen instelt om uitgebreide foutcontrole te implementeren, met name voor asynchrone bewerkingen. Uitgebreide foutcontrole kan u helpen bij het snel identificeren en diagnosticeren van problemen.

Poolfouten

Poolfouten kunnen betrekking hebben op een time-out of een fout bij het wijzigen van de grootte, het falen van automatische schaalvergroting, of een fout bij het verwijderen van een pool. Met het opnemen van gedetailleerdere foutberichten is het diagnosticeren en oplossen van deze problemen eenvoudiger geworden.

Details van de relay-providerfout

Relay-providerfouten worden rechtstreeks doorgegeven vanuit de onderliggende Azure-resourceproviders, zoals de Virtuele-machineschaalset (VMSS) van Azure en bieden meer inzicht in waarom een poolbewerking is mislukt. Deze fouten treden meestal op wanneer het maken, wijzigen of verwijderen van een pool wordt beïnvloed door een serviceprobleem met een lagere laag.

Structuur van relayproviderfout

Deze fouten worden geleverd in een gestructureerde JSON-indeling met de volgende belangrijke onderdelen:

  • Foutcode: Het type fout dat is aangetroffen (bijvoorbeeld AllocationFailed, BadRequest, enzovoort).
  • Foutbericht: Korte beschrijving van de fout
  • Providerfout-Json: Een gedetailleerd foutbericht dat is gegenereerd door de onderliggende Azure-service (bijvoorbeeld VMSS).
  • Providerfout afgekapt: Een Booleaanse waarde die aangeeft of het foutbericht van de provider is afgekapt vanwege groottelimieten.

Voorbeeld van relayproviderfouten

Voorbeeld 1

Foutcode:AllocationFailed
Foutbericht: Het gewenste aantal toegewezen knooppunten kan niet worden toegewezen
Providerfout in JSON:

{
  "error": {
    "code": "BadRequest",
    "message": "The selected VM size 'STANDARD_A1_V2' cannot boot Hypervisor Generation '2'. If this was a Create operation, please ensure that the Hypervisor Generation of the Image matches the Hypervisor Generation of the selected VM Size. If this was an Update operation, please choose a Hypervisor Generation '2' VM Size."
  }
}

Providerfout JSON afgekapt: Onwaar

Deze fout geeft aan dat de VM-grootte en de hypervisorgeneratie niet overeenkomen. In het foutbericht wordt voorgesteld om een compatibele VM-grootte te selecteren om het probleem op te lossen.

Voorbeeld 2

Foutcode:AllocationFailed
Foutbericht: er is een interne fout opgetreden tijdens het wijzigen van het formaat van de pool
Providerfout JSON:

{
  "error": {
    "code": "ScopeLocked",
    "message": "The scope '/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Compute/VirtualMachineScaleSets/<guid>-azurebatch-VMSS-D' cannot perform write operation because the following scope(s) are locked: '/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Compute/VirtualMachineScaleSets/<guid>-azurebatch-VMSS-D'. Please remove the lock and try again."
  }
}

Providerfout JSON ingekort: Niet waar

Het geeft aan dat de bewerking om de grootte van de pool aan te passen is mislukt omdat een context vergrendeld was, waardoor de schrijfoperatie werd verhinderd; het verwijderen van de vergrendeling kan het probleem oplossen.

Relay-providerfouten bieden meer inzicht in fouten in poolbewerkingen, waardoor het eenvoudiger is om problemen rechtstreeks vanuit de Azure-services vast te stellen en op te lossen.

Formaat time-out wijzigen of fout

Wanneer u een nieuwe pool maakt of het formaat van een bestaande pool wijzigt, geeft u het doelaantal knooppunten op. De bewerking voor het aanmaken of aanpassen wordt onmiddellijk voltooid, maar het daadwerkelijk toewijzen van nieuwe knooppunten of het verwijderen van bestaande knooppunten kan enkele minuten duren. U kunt de time-out voor het wijzigen van de grootte opgeven in de Pool - Toevoegen of Pool - Wijzigen APIs. Als Batch het doel aantal knooppunten niet kan toewijzen tijdens de time-outperiode voor het wijzigen van de grootte, gaat de pool in een stabiele toestand en worden er fouten gerapporteerd met betrekking tot de herconfiguratie.

De eigenschap resizeError bevat de fouten die zijn opgetreden voor de meest recente evaluatie.

Veelvoorkomende oorzaken van fouten bij het opnieuw instellen van de grootte zijn:

  • Time-out te kort wijzigen. Meestal is de standaardtime-out van 15 minuten lang genoeg om poolknooppunten toe te wijzen of te verwijderen. Als u een groot aantal knooppunten toewijst, zoals meer dan 1000 knooppunten uit een Azure Marketplace-installatiekopieën, of meer dan 300 knooppunten van een aangepaste VM-installatiekopieën (virtuele machine), kunt u de time-out voor het wijzigen van de grootte instellen op 30 minuten.

  • Onvoldoende kernquotum. Een Batch-account is beperkt in het aantal kernen dat het kan toewijzen aan alle pools en stopt met het toewijzen van knooppunten zodra dit quotum is bereikt. U kunt het kernquotum verhogen, zodat Batch meer knooppunten kan toewijzen. Zie Quota en limieten voor Batch-services voor meer informatie.

  • Onvoldoende ip-adressen van subnetten wanneer een groep zich in een virtueel netwerk bevindt. Een subnet van een virtueel netwerk moet voldoende IP-adressen hebben om toe te wijzen aan elk aangevraagd poolknooppunt. Anders kunnen de knooppunten niet worden gemaakt. Zie Een Azure Batch-pool maken in een virtueel netwerk voor meer informatie.

  • Onvoldoende resources wanneer een pool zich in een virtueel netwerk bevindt. Wanneer u een pool in een virtueel netwerk maakt, kunt u resources zoals load balancers, openbare IP-adressen en netwerkbeveiligingsgroepen (NSG's) maken in hetzelfde abonnement als het Batch-account. Zorg ervoor dat de abonnementsquota voldoende zijn voor deze resources.

  • Grote pools met aangepaste VM-installatiekopieën. Grote pools die gebruikmaken van aangepaste VM-installatiekopieën kunnen meer tijd kosten om toe te wijzen en er kunnen time-outs optreden bij het wijzigen van de grootte. Zie Een pool maken met de Azure Compute Gallery voor aanbevelingen over limieten en configuratie.

Fouten bij automatisch schalen

U kunt Azure Batch instellen om het aantal knooppunten in een pool automatisch te schalen en u definieert de parameters voor de formule voor automatisch schalen voor de pool. De Batch-service gebruikt vervolgens de formule om het aantal knooppunten in de pool periodiek te evalueren en nieuwe doelnummers in te stellen. Zie Een automatische formule maken voor het schalen van rekenknooppunten in een Batch-pool voor meer informatie.

De volgende problemen kunnen optreden wanneer u automatisch schalen gebruikt:

  • De evaluatie van automatisch schalen mislukt.
  • De resulterende bewerking voor het wijzigen van de grootte mislukt en er treedt een time-out op.
  • Een probleem met de formule voor automatisch schalen leidt tot onjuiste doelwaarden voor knooppunten. Het formaat kan werken of een time-out hebben.

Gebruik de eigenschap AutoScaleRun om informatie over de laatste evaluatie van automatische schaalaanpassing op te halen. Deze eigenschap rapporteert de evaluatietijd, de waarden en het resultaat en eventuele prestatiefouten.

Met de poolgrootte van de volledige gebeurtenis wordt informatie over alle evaluaties vastgelegd.

Fouten bij het verwijderen van pools

Als u een pool met knooppunten wilt verwijderen, verwijdert Batch eerst de knooppunten. Dit kan enkele minuten duren. Batch verwijdert vervolgens het poolobject zelf.

Batch stelt de poolState in op deleting tijdens het verwijderingsproces. De aanroepende toepassing kan detecteren of het verwijderen van de groep te lang duurt met behulp van de state en stateTransitionTime eigenschappen.

Als het verwijderen van de pool langer duurt dan verwacht, probeert Batch periodiek opnieuw totdat de pool is verwijderd. In sommige gevallen is de vertraging het gevolg van een storing in de Azure-service of andere tijdelijke problemen. Voor andere factoren die voorkomen dat het verwijderen van een pool succesvol is, moet u mogelijk actie ondernemen om het probleem te verhelpen. Deze factoren kunnen de volgende problemen omvatten:

  • Resourcevergrendelingen kunnen worden geplaatst op door Batch gemaakte resources of op netwerkresources die Door Batch worden gebruikt.

  • Resources die u hebt gemaakt, zijn mogelijk afhankelijk van een door Batch gemaakte resource. Als u bijvoorbeeld een pool in een virtueel netwerk maakt, maakt Batch een NSG, een openbaar IP-adres en een load balancer. Als u deze resources buiten de pool gebruikt, kunt u de pool niet verwijderen.

  • De Microsoft.Batch resourceprovider kan mogelijk niet geregistreerd zijn bij het abonnement dat uw pool bevat.

  • Voor batch-accounts in de gebruikersabonnementsmodus, heeft Microsoft Azure Batch mogelijk niet meer de rol Bijdrager of Eigenaar voor het abonnement dat uw pool bevat. Zie Batch toegang geven tot het abonnement voor meer informatie.

Knooppuntfouten

Zelfs wanneer Batch knooppunten in een pool toewijst, kunnen verschillende problemen ertoe leiden dat sommige knooppunten niet in orde zijn en taken niet kunnen uitvoeren. Deze knooppunten brengen nog steeds kosten in rekening, dus het is belangrijk om problemen te detecteren om te voorkomen dat u betaalt voor knooppunten die u niet kunt gebruiken. Kennis over veelvoorkomende knooppuntfouten en het weten van de huidige jobState is handig voor het oplossen van problemen.

Taakfouten starten

U kunt een optionele startTask opgeven voor een pool. Net als bij elke taak gebruikt de begintaak een opdrachtregel en kan deze resourcebestanden downloaden uit de opslag. De begintaak wordt uitgevoerd voor elk knooppunt wanneer het knooppunt wordt gestart. De waitForSuccess eigenschap geeft aan of Batch wacht totdat de begintaak is voltooid voordat taken naar een knooppunt worden gepland. Als u het knooppunt configureert om te wachten op voltooiing van de begintaak, maar de begintaak mislukt, is het knooppunt niet bruikbaar, maar worden er nog steeds kosten in rekening gebracht.

U kunt opstarttaakfouten detecteren met behulp van de eigenschappen taskExecutionResult en taskFailureInformation van de eigenschap startTaskInformation-knooppunt op het hoogste niveau.

Een mislukte begintaak zorgt er ook voor dat Batch de computeNodeState instelt op starttaskfailed, als waitForSuccess deze is ingesteld op true.

Net als bij elke taak kunnen er veel oorzaken zijn voor een mislukte begintaak. Als u problemen wilt oplossen, controleert u de stdout, stderr en andere taakspecifieke logboekbestanden.

Begintaken moeten herinvoerbaar zijn, omdat de begintaak meerdere keren op hetzelfde knooppunt kan worden uitgevoerd, bijvoorbeeld wanneer het knooppunt opnieuw geïmaget of opnieuw wordt opgestart. In zeldzame gevallen, wanneer een begintaak wordt uitgevoerd nadat een gebeurtenis een knooppunt opnieuw opstart, wordt het ene besturingssysteem (OS) of de tijdelijke schijf opnieuw geïmageerd, terwijl de andere dat niet wordt. Omdat Batch taken start en alle Batch-taken worden uitgevoerd vanaf de tijdelijke schijf, is deze situatie meestal geen probleem. In gevallen waarin de starttaak echter een toepassing op de besturingssysteemschijf installeert en andere gegevens op de tijdelijke schijf bewaart, kunnen er synchronisatieproblemen zijn. Beveilig uw toepassing dienovereenkomstig als u beide schijven gebruikt.

Downloadfout van het applicatiepakket

U kunt een of meer toepassingspakketten opgeven voor een groep. Batch downloadt de opgegeven pakketbestanden naar elk knooppunt en decomprimeert de bestanden nadat het knooppunt is gestart, maar voordat taken worden gepland. Het is gebruikelijk om een begintaakopdracht te gebruiken met toepassingspakketten, bijvoorbeeld om bestanden naar een andere locatie te kopiëren of om setup uit te voeren.

Als een toepassingspakket niet kan worden gedownload en uitgepakt, meldt de eigenschap computeNodeError de fout en stelt de knooppuntstatus in op unusable.

Fout bij downloaden van container

U kunt een of meer containerverwijzingen voor een pool opgeven. Batch downloadt de opgegeven containers naar elk knooppunt. Als de container niet kan worden gedownload, meldt de eigenschap computeNodeError de fout en stelt de knooppuntstatus in op unusable.

Updates van knooppuntbesturingssystemen

Voor Windows-pools wordt enableAutomaticUpdates standaard op true ingesteld. Hoewel het toestaan van automatische updates wordt aanbevolen, kunnen updates de voortgang van de taak onderbreken, met name als de taken lang duren. U kunt deze waarde false instellen op als u ervoor moet zorgen dat een update van het besturingssysteem niet onverwacht plaatsvindt.

Knooppunt met onbruikbare status

Batch kan om verschillende redenen de computeNodeState instellen op unusable. U kunt geen taken plannen op een unusable knooppunt, maar er worden nog steeds kosten in rekening gebracht voor het knooppunt.

Als Batch de oorzaak kan bepalen, rapporteert de eigenschap computeNodeError deze. Als een knooppunt een unusable status heeft, maar geen computeNodeError heeft, betekent dit dat Batch niet kan communiceren met de virtuele machine. In dit geval probeert Batch altijd de virtuele machine te herstellen. Batch probeert echter niet automatisch VM's te herstellen die toepassingspakketten of containers niet hebben geïnstalleerd, zelfs niet als hun status is unusable.

Andere redenen voor unusable knooppunten kunnen de volgende oorzaken bevatten:

  • Een aangepaste VM-afbeelding is ongeldig. De afbeelding is bijvoorbeeld niet goed voorbereid.
  • Een virtuele machine wordt verplaatst door een infrastructuurfout of een lage-niveau upgrade. Batch herstelt het knooppunt.
  • Er is een VM-installatiekopie geïmplementeerd op hardware die deze niet ondersteunt.
  • De VM's bevinden zich in een virtueel Azure-netwerk en verkeer is geblokkeerd voor sleutelpoorten.
  • De VM's bevinden zich in een virtueel netwerk, maar uitgaand verkeer naar Azure Storage wordt geblokkeerd.
  • De VM's bevinden zich in een virtueel netwerk met een aangepaste DNS-configuratie en de DNS-server kan Azure-opslag niet oplossen.

Logboekbestanden van knooppuntagent

Het Batch-agentproces dat wordt uitgevoerd op elk poolknooppunt biedt logboekbestanden die u kunnen helpen als u contact moet opnemen met ondersteuning over een probleem met een poolknooppunt. U kunt logboekbestanden voor een knooppunt uploaden via de Azure-portal, Batch Explorer of de Compute Node - Upload Batch Service Logs API. Nadat u de logboekbestanden hebt geüpload en opgeslagen, kunt u het knooppunt of de pool verwijderen om de kosten van het uitvoeren van de knooppunten te besparen.

Knooppuntschijf vol

Batch gebruikt de tijdelijke schijf op een VM in een knooppuntgroep om bestanden op te slaan, zoals de volgende: werkbestanden, taakbestanden en gedeelde bestanden.

  • Toepassingspakketbestanden
  • Resourcebestanden voor taak
  • Toepassingsspecifieke bestanden die zijn gedownload naar een van de Batch-mappen
  • Stdout - en stderr-bestanden voor de uitvoering van elke taaktoepassing
  • Toepassingsspecifieke uitvoerbestanden

Bestanden zoals toepassingspakketten of starttaak-bestanden worden slechts eenmaal geschreven op het moment dat Batch het poolknooppunt aanmaakt. Hoewel ze slechts eenmaal schrijven, als deze bestanden te groot zijn, kunnen ze de tijdelijke schijf vullen.

Andere bestanden, zoals stdout en stderr, worden geschreven voor elke taak die door een knooppunt wordt uitgevoerd. Als een groot aantal taken wordt uitgevoerd op hetzelfde knooppunt of als de taakbestanden te groot zijn, kunnen ze de tijdelijke schijf vullen.

Het knooppunt heeft ook een kleine hoeveelheid ruimte op de besturingssysteemschijf nodig om gebruikers aan te maken nadat het is gestart.

De grootte van de tijdelijke schijf is afhankelijk van de VM-grootte. Een overweging bij het kiezen van een VM-grootte is ervoor te zorgen dat het tijdelijke station voldoende ruimte heeft voor de geplande workload.

Wanneer u een pool toevoegt in Azure Portal, kunt u de volledige lijst met VM-grootten weergeven, inclusief een kolom resourceschijfgrootte . De artikelen waarin VM-grootten worden beschreven, bevatten tabellen met een Temp Storage-kolom . Zie VM-grootten voor geoptimaliseerde rekenkracht voor meer informatie. Zie Fsv2-serie voor een voorbeeldtabelgrootte.

U kunt een bewaartijd opgeven voor bestanden die door elke taak zijn geschreven. De bewaartijd bepaalt hoe lang de taakbestanden moeten worden bewaard voordat ze automatisch worden opgeschoond. U kunt de retentietijd verminderen om de opslagvereisten te verlagen.

Als de tijdelijke schijf of besturingssysteemschijf onvoldoende ruimte heeft of bijna geen ruimte meer heeft, wordt het knooppunt verplaatst naar de unusablecomputeNoteState en de knooppuntfout zegt dat de schijf vol is.

Als u niet zeker weet wat ruimte in beslag neemt op het knooppunt, probeert u extern verbinding te maken met het knooppunt en probeert u handmatig te onderzoeken. U kunt ook de API File - List From Compute Node gebruiken om bestanden, zoals taakuitvoer, te onderzoeken in door Batch beheerde mappen. Deze API bevat alleen bestanden in de beheerde Batch-mappen. Als uw taken elders bestanden hebben gemaakt, worden deze niet weergegeven met deze API.

Nadat u ervoor hebt gezorgd dat u alle gegevens ophaalt die u nodig hebt van het knooppunt of deze uploadt naar een duurzame opslag, kunt u zo nodig gegevens verwijderen om ruimte vrij te maken.

U kunt oude voltooide taken of taken verwijderen waarvan de taakgegevens zich nog op de knooppunten bevinden. Zoek in de recentTasks verzameling in de taskInformation op het knooppunt, of gebruik de File - List From Compute Node API. Als u een taak verwijdert, worden alle taken in de taak verwijderd. Als u de taken in de taak verwijdert, wordt het verwijderen van gegevens in de taakmappen op de knooppunten geactiveerd en wordt ruimte vrijgemaakt. Zodra u voldoende ruimte hebt vrijgemaakt, start u het knooppunt opnieuw op. Het knooppunt moet weer uit de unusable-status en in de idle-status worden verplaatst.

Als u een onbruikbaar knooppunt in VirtualMachineConfiguration-pools wilt herstellen, kunt u het knooppunt uit de pool verwijderen met behulp van de POOL - Knooppunten-API verwijderen. Vervolgens kunt u de pool opnieuw vergroten om het ongeldige knooppunt te vervangen door een nieuw knooppunt.

Belangrijk

Reimage wordt momenteel niet ondersteund voor VirtualMachineConfiguration-pools .

Volgende stappen