
概述
有些时候需要对处理器进行压力测试,但又不想使用第三方的C/S软件,其原因较多,比如:
- 内网环境不允许下载
- C/S软件体积庞大
- 安装比较耗时耗力
这里记录分享一下使用过的脚本。
脚本一
# 模拟CPU压力
function SimulateCPULoad {
$cpuCores = (Get-WmiObject -Class Win32_Processor).NumberOfCores
$loadPercentage = 100 # 设置CPU负载百分比
$processes = @()
for ($i = 0; $i -lt $cpuCores; $i++) {
$process = Start-Process -FilePath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ArgumentList "-Command while (1) { }" -PassThru
$processes += $process
}
Start-Sleep -Seconds 99999 # 运行99999 秒钟
foreach ($process in $processes) {
Stop-Process -Id $process.Id
}
}
# 模拟内存压力
function SimulateMemoryLoad {
$memorySize = (Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory
$loadPercentage = 80 # 设置内存负载百分比
$memoryLoad = $memorySize * $loadPercentage / 100
$memoryLoad = [math]::Floor($memoryLoad / 1024 / 1024) # 转换为MB
$buffer = New-Object Byte[] $memoryLoad
while ($true) {
$buffer += New-Object Byte[] 1024
}
}
# 调用函数进行模拟压力测试
SimulateCPULoad
SimulateMemoryLoad
脚本二
# 获取CPU逻辑核心数
$cores = (Get-WmiObject Win32_ComputerSystem).NumberOfLogicalProcessors
# 为每个核心启动一个高负载任务
1..$cores | ForEach-Object {
Start-Job -ScriptBlock {
$result = 1
while ($true) {
# 持续进行高强度数学运算
$result *= [Math]::Tan([Math]::Log([Math]::Exp($result)))
# 防止PowerShell优化掉未使用的变量
if ($result -gt [Math]::Exp(100)) { $result = 1 }
}
}
}
Write-Host "已启动 $cores 个负载任务,CPU使用率正在提升..."
Write-Host "按任意键停止压力测试..."
[Console]::ReadKey($true) | Out-Null
# 停止所有任务
Get-Job | Stop-Job
Get-Job | Remove-Job
Write-Host "已停止所有负载任务"
监控
# 实时监控CPU使用率
Get-Counter '\Processor(_Total)\% Processor Time' -Continuous