Delen via


AssemblyBinder-rolinstantie genereert System.IO.IOException-uitzondering

Dit artikel bevat informatie over het oplossen van problemen waarbij het AssemblyBinder-rolexemplaren van de compressortoepassing vastloopt tussen bezet en opnieuw opstarten en de uitzondering System.IO.IOException genereert: Er is onvoldoende ruimte op de schijf.

Oorspronkelijke productversie: API Management Service
Origineel KB-nummer: 4464907

Opmerking

Raadpleeg het artikel over Azure Cloud Service Troubleshooting Series. Dit is het tweede scenario van het lab. Zorg ervoor dat u de installatie-instructies voor het lab voor compressortoepassing hebt gevolgd om het probleem opnieuw te maken.

Symptomen

Het assemblyBinder-rolexemplaren van de compressortoepassing genereert de onderstaande onverwerkte uitzondering in de blade Azure Portal en loopt vast 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

Vanuit de foutaanroepstack lijkt het erop dat deze WorkerRole een uitpak- of extraherenbewerking uitvoert op de methode OnStart(), maar deze mislukt vanwege onvoldoende opslag. De volgende voor de hand liggende vraag die bij u opkomt, 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 nemen en te zien wat u kunt vinden.

Schermopname van ProcMon-tracering in Procesmonitor.

WaWorkerHost.exe proces is het schrijven van een bestand in de standaard tijdelijke map, die een maximale grootte van 100 MB heeft, die op een bepaald moment vol kan raken. Wanneer u naar de map RoleTemp navigeert, ziet u mogelijk dat het quotum voor schijfruimte voor die map wordt uitgeput.

Schermopname van de map RoleTemp.

Misschien hebt u de oorzaak van het probleem vastgesteld, maar wat moet u doen wanneer er onvoldoende ruimte is op de RoleTemp-locatie ? Hier is het antwoord.

Daarom moet u een lokale opslagresource configureren en de TEMP- en TMP-mappen naar het pad van de lokale opslagresource verwijzen, 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 binnen 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 Feedback-community van Azure.