powershell 是 windows 服务器性能基准测试的高效工具,通过 get-counter 直接采集 cpu、内存、磁盘、网络等计数器,支持负载模拟、结构化导出与基线比对,并可封装为参数化脚本实现自动化基准测试。
powershell 是 windows 服务器性能基准测试的高效工具,无需额外安装大型框架即可采集 cpu、内存、磁盘 i/o、网络等核心指标,并支持自动化、定时执行与结果导出。
采集关键性能计数器
Windows 内置 Get-Counter 可直接读取高性能性能计数器(PerfMon),比 WMI 更轻量、响应更快。常用路径包括:
-
\Processor(_Total)\% Processor Time—— 整体 CPU 使用率 -
\Memory\Available MBytes—— 可用物理内存(MB) -
\LogicalDisk(C:)\Avg. Disk sec/Read和\Avg. Disk sec/Write—— 磁盘延迟(建议阈值 -
\Network Interface(*)\Bytes Total/sec—— 各网卡吞吐量(替换 * 为具体适配器名)
示例:每 2 秒采集一次,持续 60 秒,保存到变量中
Get-Counter -Counter '\Processor(_Total)\% Processor Time', '\Memory\Available MBytes' -SampleInterval 2 -MaxSamples 30
模拟负载并同步采集
单纯看空闲指标意义有限。可结合 Start-Job 或外部工具(如 diskspd.exe、curl 压测 API)制造可控负载,再用 Get-Counter 并行采样。
例如:启动一个占用单核 CPU 的 PowerShell 后台任务,同时采集 1 分钟数据
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
$job = Start-Job { while($true) { 1..10000 | ForEach-Object { [math]::sqrt($_) } } }
try {
Get-Counter -Counter '\Processor(_Total)\% Processor Time' -SampleInterval 1 -MaxSamples 60 |
Export-Counter -Path "cpu_load.blg" -Force
} finally {
Stop-Job $job; Remove-Job $job
}结构化输出与基线比对
将 Get-Counter 输出转为对象后,可用 Select-Object 提取时间戳、实例名、值,并导出 CSV 方便后续分析:
$data = Get-Counter '\Processor(_Total)\% Processor Time' -MaxSamples 10 $data.CounterSamples | Select-Object Timestamp, Path, CookedValue | Export-Csv perf_baseline.csv -NoTypeInformation
后续可加载历史 CSV,用 Measure-Object 计算均值、P95 延迟、峰值波动范围,建立该服务器的健康基线。例如:
(Import-Csv perf_baseline.csv).CookedValue | Measure-Object -Average -Maximum -Percentile 95
封装为可复用的基准脚本
把采集、负载、输出逻辑整合成函数,支持参数化控制时长、间隔、目标计数器和输出路径:
- 用
[CmdletBinding()]支持-Verbose调试输出 - 用
param()定义-DurationSec、-IntervalSec、-Counters、-OutputPath - 自动创建带时间戳的文件名,如
baseline_20240520_1422.csv - 加入简单异常捕获,如计数器不存在时提示有效路径(可用
Get-Counter -ListSet *查看)
这样一份脚本可在不同服务器上一键运行,输出标准化数据,便于横向对比或纳入 CI/CD 性能门禁流程。










