Set-AzureVMDscExtension с большим пакетом приводит к чрезмерному использованию памяти в PowerShell DSC Extension

Наконец-то мне удалось автоматизировать наш процесс выпуска, используя Desired State Configuration с методами Azure PowerShell SDK, в частности комбо Publish-AzureVMDscConfiguration -> Set-AzureVMDscExtension -> Update-AzureVM.

Немного подумав в способ отправки выходных данных сборки куда-либо, доступный для виртуальной машины, я остановился на стратегии добавления отбрасываемых сборок в пакет конфигурации, который загружается в хранилище Azure.

Теперь моя проблема заключается в том, что как только расширение PowerShell DSC в виртуальной машине начинает загружать этот пакет, потребление памяти становится зашкаливающим. Когда я открываю диспетчер задач, я вижу, что недавно созданный процесс PowerShell увеличился с 30 или около того мегабайт до 300, а затем до 1,3 ГБ, полностью разрушая мою виртуальную машину.

Вчера днем ​​я ушел с работы и позволил ему обработать, но когда я сегодня вошел в виртуальную машину, внутренний zip-файл, содержащий выходные данные моей сборки, имел 0 байтов в папке DSCWork. Моя проблема в том, что даже если это сработало в конце, это занимает очень много времени и делает мою виртуальную машину бесполезной... Я даже не могу переключаться между окнами в удаленный доступ, так как машина полностью застряла при 100% использовании ОЗУ.

Почему PowerShell требует так много памяти и времени для загрузки моего пакета конфигурации? Он имеет только 60 МБ в заархивированном виде и примерно 200 МБ в разархивированном виде. Могу ли я что-то сделать, чтобы этого не произошло?

ОБНОВЛЕНИЕ:

Я только что протестировал его, и он, наконец, завершился правильно. Заняло больше часа, но файлы есть... Хотя это неприемлемо.


person julealgon    schedule 30.10.2014    source источник


Ответы (1)


Эта проблема должна быть решена в следующей итерации расширения. Тем временем вы можете захотеть загрузить содержимое сборки в большой двоичный объект отдельно от ZIP-пакета конфигурации (для этого можно использовать Set-AzureStorageBlobContent).

Затем вы можете использовать ресурсы удаленного файла или сценария в исходной конфигурации для загрузки большого двоичного объекта. Обязательно добавьте соответствующие зависимости в свою конфигурацию, чтобы большой двоичный объект загружался перед его использованием.

configuration DownloadSample
{
    Import-DscResource -Module xPSDesiredStateConfiguration

    xRemoteFile Download
    { 
       Uri = 'https://....blob.core.windows.net/windows-powershell-dsc/foo.zip?sv=...'
       DestinationPath = 'd:\tmp\download.zip'
   }
}
person Norberto Arrieta    schedule 31.10.2014
comment
Что вы подразумеваете под тем, что должно быть решено в следующей итерации расширения? Это известная проблема? Если бы вы могли поделиться ссылкой на него, я был бы очень признателен. Я просмотрел сценарии расширения и не нашел ничего, что могло бы привести к такому сумасшедшему использованию памяти. Я рассмотрю этот подход, но я хотел бы избежать его, поскольку эта же конфигурация используется на локальном компьютере, где я могу получить доступ к общей папке, где находятся капли. - person julealgon; 02.11.2014
comment
Проблема с текущими сценариями заключается в том, что они загружают содержимое в память, а затем используют Set-Content для его записи на диск. Это может быть очень дорого для больших файлов и было исправлено. Позже в этом месяце будет выпущен еще один выпуск расширения, и в него включено исправление. - person Norberto Arrieta; 04.11.2014
comment
У вас есть быстрое предложение, пока исправление не будет запущено? У меня есть доступ к виртуальной машине, и я знаю, где находятся сценарии. Если бы вы могли указать мне на исправление, я, вероятно, мог бы воспроизвести его и сохранить эти сценарии, верно? - person julealgon; 04.11.2014
comment
Это потрясающе! Я вручную отредактировал командлет Get-AzureBlobContent в модуле DscExtensionUtilities.psm1, чтобы использовать параметр OutFile модуля Invoke-WebRequest, тем самым сохранив содержимое напрямую вместо использования конвейера Set-Content, и теперь процесс потребляет не более 150 МБ и завершается очень быстро! Это будет нормально, пока не выйдет новая версия. - person julealgon; 04.11.2014
comment
Просто хотел поместить это здесь, если это кому-то поможет. После установки версии расширения 1.5.0.0 проблема ушла. - person julealgon; 19.12.2014