You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下如何通过编程方式监控测试应用的资源使用情况

Windows下进程性能监控的可编程实现方案

针对你需要在性能测试进程启动前开启监控、结束后汇总CPU/RAM/硬盘使用率的需求,以下是两种Windows环境下的实用可编程方案:


一、PowerShell脚本实现(无需额外安装工具)

PowerShell自带对Windows性能计数器的支持,能轻松实现进程监控、数据记录和可视化,完全符合你的需求。

脚本示例

# 配置参数
$processName = "your_target_process.exe"  # 替换为被测进程的可执行文件名
$monitorInterval = 1  # 监控间隔(单位:秒)
$outputCsv = "process_perf_data.csv"

# 初始化监控数据容器
$metricsList = @()

# 等待目标进程启动(进程未启动时持续等待)
Write-Host "等待目标进程启动..."
do {
    $targetProc = Get-Process -Name $processName -ErrorAction SilentlyContinue
    Start-Sleep -Seconds 1
} while (-not $targetProc)

$procId = $targetProc.Id
Write-Host "开始监控进程ID: $procId"

# 持续监控直到进程结束
while (Get-Process -Id $procId -ErrorAction SilentlyContinue) {
    # 获取核心指标
    $cpuUsage = [math]::Round((Get-Counter "\Process($processName)\% Processor Time").CounterSamples.CookedValue, 2)
    $ramUsageMB = [math]::Round((Get-Process -Id $procId).WorkingSet / 1MB, 2)
    $diskReadPerSec = [math]::Round((Get-Counter "\Process($processName)\IO Read Bytes/sec").CounterSamples.CookedValue, 2)
    $diskWritePerSec = [math]::Round((Get-Counter "\Process($processName)\IO Write Bytes/sec").CounterSamples.CookedValue, 2)
    $currentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

    # 记录数据
    $metricsList += [PSCustomObject]@{
        Timestamp = $currentTime
        CPU_Usage_Percent = $cpuUsage
        RAM_Usage_MB = $ramUsageMB
        Disk_Read_Bytes_Sec = $diskReadPerSec
        Disk_Write_Bytes_Sec = $diskWritePerSec
    }

    # 实时控制台输出
    Write-Host "$currentTime | CPU: $cpuUsage% | RAM: $ramUsageMB MB | 读盘: $diskReadPerSec B/s | 写盘: $diskWritePerSec B/s"

    Start-Sleep -Seconds $monitorInterval
}

# 保存数据到CSV文件
$metricsList | Export-Csv -Path $outputCsv -NoTypeInformation
Write-Host "监控结束,原始数据已保存到: $outputCsv"

# 可选:生成可视化图表
Add-Type -AssemblyName System.Windows.Forms.DataVisualization
$chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$chart.Size = New-Object System.Drawing.Size(800, 600)
$chartArea = $chart.ChartAreas.Add("MainArea")

# 添加CPU使用率曲线
$cpuSeries = $chart.Series.Add("CPU使用率")
$cpuSeries.ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Line
$metricsList | ForEach-Object { $cpuSeries.Points.AddXY($_.Timestamp, $_.CPU_Usage_Percent) }

# 添加RAM使用率曲线(右侧Y轴)
$ramSeries = $chart.Series.Add("RAM使用率")
$ramSeries.ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Line
$ramSeries.YAxisType = [System.Windows.Forms.DataVisualization.Charting.AxisType]::Secondary
$metricsList | ForEach-Object { $ramSeries.Points.AddXY($_.Timestamp, $_.RAM_Usage_MB) }

# 保存图表为图片
$chart.SaveImage("process_perf_chart.png", [System.Windows.Forms.DataVisualization.Charting.ChartImageFormat]::Png)
Write-Host "监控图表已保存到: process_perf_chart.png"

使用说明

  1. 替换$processName为你的目标进程名(比如notepad.exe)
  2. 右键以管理员身份打开PowerShell,执行脚本:.\monitor_process.ps1
  3. 脚本会自动等待进程启动,监控至进程结束后输出CSV数据和PNG图表

二、Python脚本实现(灵活度更高)

如果你熟悉Python,用psutil库可以更灵活地获取进程指标,配合matplotlib生成专业图表。

步骤1:安装依赖

pip install psutil matplotlib

脚本示例

import psutil
import time
import matplotlib.pyplot as plt
from datetime import datetime

# 配置参数
TARGET_PROCESS = "your_target_process.exe"  # 替换为被测进程名
MONITOR_INTERVAL = 1  # 监控间隔(秒)
OUTPUT_CSV = "process_perf_data.csv"

# 等待目标进程启动
print("等待目标进程启动...")
target_proc = None
while not target_proc:
    for proc in psutil.process_iter(['name']):
        if proc.info['name'] == TARGET_PROCESS:
            target_proc = proc
            break
    time.sleep(1)

proc_id = target_proc.pid
print(f"开始监控进程ID: {proc_id}")

# 初始化数据存储
timestamps = []
cpu_data = []
ram_data = []
disk_read_data = []
disk_write_data = []

# 持续监控直到进程退出
while psutil.pid_exists(proc_id):
    try:
        proc = psutil.Process(proc_id)
        # 获取指标
        cpu_usage = proc.cpu_percent(interval=MONITOR_INTERVAL)
        ram_usage_mb = round(proc.memory_info().rss / (1024 * 1024), 2)
        io_stats = proc.io_counters()
        disk_read = io_stats.read_bytes
        disk_write = io_stats.write_bytes
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        # 记录数据
        timestamps.append(current_time)
        cpu_data.append(cpu_usage)
        ram_data.append(ram_usage_mb)
        disk_read_data.append(disk_read)
        disk_write_data.append(disk_write)

        # 控制台输出
        print(f"{current_time} | CPU: {cpu_usage}% | RAM: {ram_usage_mb}MB | 累计读盘: {disk_read}B | 累计写盘: {disk_write}B")

    except psutil.NoSuchProcess:
        break

# 保存数据到CSV
with open(OUTPUT_CSV, 'w', encoding='utf-8') as f:
    f.write("Timestamp,CPU_Usage_Percent,RAM_Usage_MB,Disk_Read_Total_Bytes,Disk_Write_Total_Bytes\n")
    for t, c, r, dr, dw in zip(timestamps, cpu_data, ram_data, disk_read_data, disk_write_data):
        f.write(f"{t},{c},{r},{dr},{dw}\n")
print(f"监控结束,原始数据已保存到: {OUTPUT_CSV}")

# 生成可视化图表
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))

# CPU使用率图表
ax1.plot(timestamps, cpu_data, color='blue', label='CPU使用率(%)')
ax1.set_title('CPU使用率趋势')
ax1.set_ylabel('CPU %')
ax1.legend()
ax1.tick_params(axis='x', rotation=45)

# RAM使用率图表
ax2.plot(timestamps, ram_data, color='green', label='RAM使用率(MB)')
ax2.set_title('RAM使用率趋势')
ax2.set_xlabel('时间戳')
ax2.set_ylabel('RAM (MB)')
ax2.legend()
ax2.tick_params(axis='x', rotation=45)

plt.tight_layout()
plt.savefig('process_perf_chart.png')
print(f"监控图表已保存到: process_perf_chart.png")
plt.show()

使用说明

  1. 替换TARGET_PROCESS为目标进程名
  2. 运行脚本:python monitor_process.py
  3. 脚本会自动等待进程启动,监控至进程结束后生成CSV数据和可视化图表

关键注意事项

  • 进程匹配:如果存在多个同名进程,脚本会监控第一个找到的进程;若需要精确匹配,可改为通过进程ID指定(提前获取或让用户输入)
  • 权限问题:部分系统进程需要管理员权限才能获取完整指标,运行脚本时请以管理员身份启动
  • 磁盘IO指标:PowerShell版本输出的是每秒IO速率,Python版本输出的是累计IO字节数,若需要每秒速率,可计算相邻两次数据的差值

内容的提问来源于stack exchange,提问作者Haris_007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:05:28