Экземпляр роли AssemblyBinder вызывает исключение System.IO.IOException
В этой статье содержатся сведения об устранении неполадок, в которых экземпляр роли AssemblyBinder приложения "Зависает" между состоянием "Занят" и "Перезапуск" и создает исключение System.IO.IOException: на диске недостаточно места.
Исходная версия продукта: служба Управление API
Исходный номер базы знаний: 4464907
Примечание.
Ознакомьтесь со статьей по серии устранения неполадок облачной службы Azure, это второй сценарий лаборатории. Убедитесь, что вы выполнили инструкции по настройке лаборатории для приложения "Компрессор", чтобы воссоздать проблему.
Симптомы
Экземпляр роли AssemblyBinder в приложении "Конвейер" вызывает приведенное ниже необработанное исключение в колонке портал Azure и зависает между состоянием "Занят" и "Перезапуск".
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].
Действия по устранению неполадок
В стеке вызовов ошибок он выглядит так, как этот WorkerRole выполняет некоторую операцию распаковки или извлечения в методе OnStart(), но происходит сбой из-за нехватки хранилища. Следующий очевидный вопрос, который придет к вашему мнению, заключается в том, где именно WaWorkerHost.exe процесс извлекает файл.
Чтобы узнать ответ, используйте средство монитора процессов для получения трассировки ProcMon и просмотра того, что можно найти.
WaWorkerHost.exe процесс записывает некоторый файл во временном каталоге по умолчанию, который имеет максимальный размер 100 МБ, который может стать полным в какой-то момент. При переходе к каталогу RoleTemp можно обнаружить, что квота места на диске действительно исчерпана для этого каталога.
Возможно, вы узнали причину проблемы, но что делать при истечении места в расположении RoleTemp ? Вот ответ.
Поэтому следует настроить локальный ресурс хранилища и указать каталоги TEMP и TMP на путь к локальному ресурсу хранилища, как показано ниже:
Объявление локального ресурса должно быть добавлено в файл определения службы для роли AssemblyBinder.
<?xml version="1.0" encoding="UTF-8"?>
<LocalResources>
<LocalStorage name="FileStorage" cleanOnRoleRecycle="true" sizeInMB="200" />
</LocalResources>
Это изменение следует выполнить внутри метода RoleEntryPoint.OnStart .
localResource = RoleEnvironment.GetLocalResource("FileStorage");
Environment.SetEnvironmentVariable("TMP", localResource.RootPath);
Environment.SetEnvironmentVariable("TEMP", localResource.RootPath);
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.