AssemblyBinder-rollinstansen genererar System.IO.IOException-undantag
Den här artikeln innehåller information om felsökningsproblem där AssemblyBinder-rollinstansen av kompressorprogrammet har fastnat mellan tillståndet Upptagen och Omstart och utlöser System.IO.IOException-undantag som anger: Det finns inte tillräckligt med utrymme på disken.
Ursprunglig produktversion: API Management Service
Ursprungligt KB-nummer: 4464907
Kommentar
I artikeln om felsökningsserien för Azure Cloud Service är det här det andra scenariot i labbet. Kontrollera att du har följt instruktionerna för labbkonfiguration för kompressorprogrammet enligt detta för att återskapa problemet.
Symptom
AssemblyBinder-rollinstansen i Compressor-programmet genererar undantaget nedan på bladet Azure Portal och fastnar mellan tillståndet Upptagen och Omstart.
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].
Felsökningssteg
Från felanropsstacken ser det ut som om den här WorkerRole utför en viss uppacknings- eller extraheringsåtgärd på Metoden OnStart(), men den misslyckas på grund av otillräcklig lagring. Nästa uppenbara fråga som kommer att komma till ditt sinne är var exakt WaWorkerHost.exe processen är att extrahera filen.
För att ta reda på svaret använder du processövervakarverktyget för att ta en ProcMon-spårning och se vad du kan hitta.
WaWorkerHost.exe processen skriver en fil i sin temporära standardkatalog, som har en maximal storlek på 100 MB, som kan bli full någon gång. När du navigerar till katalogen RoleTemp kanske du upptäcker att diskutrymmeskvoten verkligen blir förbrukad för den katalogen.
Du kanske har listat ut orsaken till problemet, men vad ska du göra när utrymmet på RoleTemp-platsen tar slut? Här är svaret.
Därför bör du konfigurera en lokal lagringsresurs och peka TEMP- och TMP-katalogerna på sökvägen till den lokala lagringsresursen som nedan:
Den lokala resursdeklarationen måste ha lagts till i tjänstdefinitionsfilen för rollen AssemblyBinder.
<?xml version="1.0" encoding="UTF-8"?>
<LocalResources>
<LocalStorage name="FileStorage" cleanOnRoleRecycle="true" sizeInMB="200" />
</LocalResources>
Den här ändringen bör utföras i metoden RoleEntryPoint.OnStart .
localResource = RoleEnvironment.GetLocalResource("FileStorage");
Environment.SetEnvironmentVariable("TMP", localResource.RootPath);
Environment.SetEnvironmentVariable("TEMP", localResource.RootPath);
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.