如何获取Azure虚拟机运行管道时的峰值内存并监控其内存使用
监控Azure虚拟机管道运行期间的内存使用及峰值数据
一、利用Azure内置指标获取VM整体内存情况
- 登录Azure门户,找到目标VM,进入「监控」>「指标」页面
- 选择指标命名空间为「Guest (Classic)」或「Guest」,再选中「Used Memory Bytes」或「Available Memory Bytes」指标
- 调整时间范围匹配管道运行时段,图表会显示内存变化曲线,通过图表的「峰值」统计项可直接获取这段时间的内存峰值
- 自动化获取的话,用PowerShell执行以下命令(替换资源组、VM名和时间范围):
$vm = Get-AzVM -ResourceGroupName "你的资源组名称" -Name "你的VM名称" Get-AzMetric -ResourceId $vm.Id -MetricName "UsedMemoryBytes" -TimeGrain 00:01:00 -StartTime (Get-Date).AddHours(-1) -EndTime (Get-Date) | Select-Object -ExpandProperty Data | Measure-Object -Property Maximum -Maximum
二、跟踪管道脚本/应用进程的内存使用(解决RDP看不到的问题)
管道运行的PowerShell进程通常在系统会话中,RDP登录的用户会话看不到,直接在管道脚本里加监控逻辑:
- 记录当前脚本进程的内存使用,直到脚本或应用结束:
$logFile = "C:\temp\memory_usage.log" # 写入表头 "时间戳,已用内存(MB)" | Out-File $logFile -Encoding UTF8 # 循环监控 do { $currentProcess = Get-Process -Id $PID $usedMemMB = [math]::Round($currentProcess.PrivateMemorySize64 / 1MB, 2) "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'),$usedMemMB" | Out-File $logFile -Append -Encoding UTF8 Start-Sleep -Seconds 1 # 检测目标应用是否运行,替换为你的应用进程名 } while (Get-Process -Name "你的应用进程名" -ErrorAction SilentlyContinue) # 计算并输出峰值 $peakMem = Import-Csv $logFile | Measure-Object -Property "已用内存(MB)" -Maximum Write-Host "管道运行期间进程峰值内存:$($peakMem.Maximum) MB" - 如果要监控应用进程,把
$PID换成应用的进程名或ID即可。
三、用Log Analytics收集进程级内存数据
- 给VM启用Log Analytics代理,将进程性能数据发送到工作区
- 管道运行结束后,在Log Analytics中执行Kusto查询(替换时间范围和进程名):
Perf | where ObjectName == "Process" and CounterName == "Private Bytes" | where InstanceName == "powershell.exe" // 替换为你的进程名 | where TimeGenerated between (datetime(2024-05-20 08:00:00) .. datetime(2024-05-20 09:00:00)) | summarize 峰值内存(MB) = max(CounterValue)/1MB by InstanceName
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

