具有大包的Set-AzureVMDscExtension导致PowerShell DSC扩展中的极端内存使用

时间:2014-10-30 13:14:31

标签: powershell azure azure-storage-blobs azure-powershell dsc

我终于使用Azure PowerShell SDK方法,特别是Publish-AzureVMDscConfiguration -> Set-AzureVMDscExtension -> Update-AzureVM组合,使用Desired State Configuration自动化我们的发布过程。

a way to send my build outputs somewhere accessible by the VM中考虑了一段时间之后,我最终采用了将构建包附加到上传到Azure存储的配置包中的策略。

我现在的问题是,只要VM中的PowerShell DSC扩展程序开始下载该程序包,它的内存消耗就会消失。当我打开任务管理器时,我可以看到新创建的PowerShell进程从30兆字节到300兆字节再到1.3GB,完全破坏了我的虚拟机。

昨天下午,我离开工作并让它处理,但是当我今天登录VM时,包含我的构建输出的内部zip文件在DSCWork文件夹中有0个字节。我的问题是甚至如果它最终工作,它需要很长的时间并使我的VM无用......我甚至无法在Windows之间进行更改远程访问,因为机器完全停留在100%的RAM使用率。

为什么PowerShell需要花费大量内存和时间来下载我的配置包?它只有60MB拉链,大约200MB解压缩。我能做些什么来阻止这种情况发生吗?

更新

我刚才测试了它,它终于正确完成了。花了一个多小时,但文件都在那里......但这是不可接受的。

1 个答案:

答案 0 :(得分:2)

此问题应在扩展的下一次迭代中解决。同时,您可能需要考虑将构建内容上传到与配置ZIP包分开的blob(您可以使用Set-AzureStorageBlobContent)。

然后,您可以使用原始配置中的远程文件或脚本资源来下载blob。请务必在配置中添加适当的依赖项,以便在使用之前下载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'
   }
}