Le rôle AssemblyBinder instance lève l’exception System.IO.IOException
Cet article fournit des informations sur la résolution des problèmes dans lesquels le rôle AssemblyBinder instance de l’application Compressor est bloqué entre l’état Occupé et redémarrage et la levée d’une exception System.IO.IOException indiquant : Il n’y a pas suffisamment d’espace sur le disque.
Version du produit d’origine : Gestion des API Service
Numéro de la base de connaissances d’origine : 4464907
Remarque
Reportez-vous à l’article sur la série de résolution des problèmes des services cloud Azure. Il s’agit du deuxième scénario du labo. Vérifiez que vous avez suivi les instructions de configuration du labo pour l’application Compressor pour recréer le problème.
Symptômes
Le rôle AssemblyBinder instance de l’application Compressor lève l’exception non prise en charge ci-dessous dans le panneau Portail Azure et est bloqué entre l’état Occupé et l’état Redémarrage.
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].
Étapes de résolution des problèmes
À partir de la pile des appels d’erreurs, il semble que ce WorkerRole effectue une opération de décompression ou d’extraction sur la méthode OnStart(), mais qu’il échoue en raison d’un stockage insuffisant. La prochaine question évidente qui vous vient à l’esprit est où exactementWaWorkerHost.exe processus est l’extraction du fichier.
Pour trouver la réponse, utilisez l’outil Process Monitor pour prendre une trace ProcMon et voir ce que vous pouvez trouver.
WaWorkerHost.exe processus écrit un fichier dans son répertoire temporaire par défaut, qui a une taille maximale de 100 Mo, qui peut devenir plein à un moment donné. Lorsque vous accédez au répertoire RoleTemp , vous pouvez constater que le quota d’espace disque est effectivement épuisé pour ce répertoire.
Vous avez peut-être identifié la cause du problème, mais que devez-vous faire en cas de manque d’espace dans l’emplacement RoleTemp ? Voici la réponse.
Par conséquent, vous devez configurer une ressource de stockage locale et pointer les répertoires TEMP et TMP vers le chemin d’accès de la ressource de stockage local comme ci-dessous :
La déclaration de ressource locale doit avoir été ajoutée au fichier de définition de service pour le rôle AssemblyBinder.
<?xml version="1.0" encoding="UTF-8"?>
<LocalResources>
<LocalStorage name="FileStorage" cleanOnRoleRecycle="true" sizeInMB="200" />
</LocalResources>
Cette modification doit être effectuée dans la méthode RoleEntryPoint.OnStart .
localResource = RoleEnvironment.GetLocalResource("FileStorage");
Environment.SetEnvironmentVariable("TMP", localResource.RootPath);
Environment.SetEnvironmentVariable("TEMP", localResource.RootPath);
Contactez-nous pour obtenir de l’aide
Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour