Set-AzureVMDscExtension с большим пакетом приводит к чрезмерному использованию памяти в PowerShell DSC Extension
В конце концов мне удалось автоматизировать процесс выпуска с использованием конфигурации требуемого состояния с помощью методов Azure PowerShell SDK, в частности Publish-AzureVMDscConfiguration -> Set-AzureVMDscExtension -> Update-AzureVM
комбо.
Подумав некоторое время о том, чтобы отправить результаты сборки в куда-нибудь доступную для виртуальной машины, я в итоге разработал стратегию добавления своих сборок в пакет конфигурации, который загружается в хранилище Azure.
Моя проблема сейчас заключается в том, что как только расширение PowerShell DSC в виртуальной машине начинает загружать этот пакет, его потребление памяти значительно возрастает. Когда я открываю диспетчер задач, я вижу, что вновь созданный процесс PowerShell идет от 30 или около того мегабайт до 300, а затем до 1,3 ГБ, полностью разрушая мою виртуальную машину.
Вчера днем я оставил работу и позволил ей обрабатывать, но когда я вошел сегодня в виртуальную машину, внутренний zip-файл, содержащий мои выходные данные сборки, имел 0 байт в папке DSCWork. Моя проблема в том, что, даже если это работало в конце, это занимает очень много времени и делает мою виртуальную машину бесполезной... Я даже не могу переключаться между окнами в удаленном доступе, так как машина полностью зависает при 100% -ом использовании ОЗУ,
Почему PowerShell занимает так много памяти и времени, чтобы загрузить мой пакет конфигурации? Он имеет только 60 МБ на молнии и примерно 200 МБ на молнии. Что я могу сделать, чтобы этого не случилось?
ОБНОВИТЬ:
Я только что проверил это, и наконец-то все закончилось правильно. Прошло больше часа, но файлы есть... Это неприемлемо.
1 ответ
Эта проблема должна быть решена в следующей итерации расширения. В то же время вы можете рассмотреть возможность загрузки содержимого вашей сборки в BLOB-объект отдельно от вашего ZIP-пакета конфигурации (для этого вы можете использовать Set-AzureStorageBlobContent).
Затем вы можете использовать удаленный файл или ресурсы скрипта в исходной конфигурации для загрузки BLOB-объекта. Обязательно добавьте соответствующие зависимости в свою конфигурацию, чтобы большой двоичный объект загружался перед его использованием.
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'
}
}