AssemblyBinder-rolinstantie genereert system.IO.IOException-uitzondering
Dit artikel bevat informatie over het oplossen van problemen waarbij assemblybinder-rolinstantie van de compressortoepassing is vastgelopen tussen de status Bezet en Opnieuw opstarten en het genereren van system.IO.IOException-uitzondering waarin staat: er is onvoldoende ruimte op de schijf.
Oorspronkelijke productversie: API Management Service
Oorspronkelijk KB-nummer: 4464907
Notitie
Raadpleeg het artikel over azure Cloud Service Troubleshooting Series. Dit is het tweede scenario van het lab. Zorg ervoor dat u de installatie-instructies van het lab voor de Compressor-toepassing hebt gevolgd om het probleem opnieuw te maken.
Symptomen
AssemblyBinder-rolinstantie van de Compressor-toepassing genereert de onderstaande onverwerkte uitzondering op de blade Azure Portal en blijft hangen tussen bezet en opnieuw opstarten.
Unhandled Exception: There is not enough space on the disk. at System.IO.__Error.WinIOError (Int32 errorCode, String maybeFullPath) at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) at Ionic.Zip.ZipEntry.ExtractAndCrc(Stream archiveStream, Stream targetOutput, Int16 compressionMethod, Int64 compressedFileDataSize, Int64 uncompressedSize) at Ionic.Zip.ZipEntry.ExtractToStream(Stream archiveStream, Stream output, EncryptionAlgorithm encryptionAlgorithm, Int32 expectedCrc32) at Ionic.Zip.ZipEntry.InternalExtractToBaseDir(String baseDir, String password, ZipContainer zipContainer, ZipEntrySource zipEntrySource, String fileName) at Ionic.Zip.ZipFile._InternalExtractAll(String path, Boolean overrideExtractExistingProperty) at AssemblyBinder.WorkerRole.OnStart() in D:\compressor\AssemblyBinder\WorkerRole.cs:line 56 at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeRoleInternal(RoleType roleTypeEnum) at Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge. <InitializeRole> b__0() at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()'[2018-08-12T14:47:25Z] Last exit time: [2018/08/12, 14:47:25.965].
Stappen voor probleemoplossing
Uit de foutaanroepstack lijkt het erop dat deze WorkerRole een uitpak- of uitpakbewerking uitvoert bij de methode OnStart(), maar dit mislukt vanwege onvoldoende opslag. De volgende voor de hand liggende vraag die in uw gedachten zal komen, is waar precies WaWorkerHost.exe proces het bestand uitpakken.
Als u het antwoord wilt achterhalen, gebruikt u het hulpprogramma Procesmonitor om een ProcMon-tracering te maken en te zien wat u kunt vinden.
WaWorkerHost.exe proces schrijft een bestand in de standaard tijdelijke map, die op een bepaald moment een maximale grootte van 100 MB heeft. Wanneer u naar de map RoleTemp navigeert, kan het zijn dat het quotum voor schijfruimte inderdaad wordt uitgeput voor die map.
Misschien hebt u de oorzaak van het probleem vastgesteld, maar wat moet u doen wanneer er onvoldoende ruimte beschikbaar is op de RoleTemp-locatie ? Hier is het antwoord.
Daarom moet u een lokale opslagresource configureren en de TEMP- en TMP-mappen verwijzen naar het pad van de lokale opslagresource, zoals hieronder:
De declaratie van de lokale resource moet zijn toegevoegd aan het servicedefinitiebestand voor de rol AssemblyBinder.
<?xml version="1.0" encoding="UTF-8"?>
<LocalResources>
<LocalStorage name="FileStorage" cleanOnRoleRecycle="true" sizeInMB="200" />
</LocalResources>
Deze wijziging moet worden uitgevoerd in de methode RoleEntryPoint.OnStart .
localResource = RoleEnvironment.GetLocalResource("FileStorage");
Environment.SetEnvironmentVariable("TMP", localResource.RootPath);
Environment.SetEnvironmentVariable("TEMP", localResource.RootPath);
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.