Skip to content

增加负荷批处理

CPU负载

# 获取逻辑核心数
$cores = [Environment]::ProcessorCount
$jobsToStart = [Math]::Ceiling($cores / 2)

Write-Host "检测到 $cores 个逻辑核心" -ForegroundColor Cyan
Write-Host "将启动 $jobsToStart 个满载后台作业,预计整体CPU占用率 50%" -ForegroundColor Green
Write-Host ""

# 启动后台作业(每个作业无限空循环)
$jobs = @()
for ($i = 1; $i -le $jobsToStart; $i++) {
    $jobs += Start-Job -ScriptBlock {
        while ($true) {
            # 空循环占满 CPU
            $a = 1 + 1
        }
    }
    Write-Host "已启动作业 #$i"
}

Write-Host ""
Write-Host "所有作业已启动。现在打开任务管理器查看 CPU 使用率(应稳定在 50% 左右)。" -ForegroundColor Yellow
Write-Host "按 Enter 键停止所有作业并退出..."
Read-Host

# 停止并清理作业
$jobs | Stop-Job
$jobs | Remove-Job
Write-Host "已停止所有作业。" -ForegroundColor Red

增加内存负荷

<#
.SYNOPSIS
    安全地占用指定量物理内存,自动避免数组过大错误。
.DESCRIPTION
    使用较小的块(默认64MB)分配内存,避免单个数组超出限制。
    若分配失败,自动减小块大小重试。
    按 Enter 释放内存。
#>

# 配置目标内存(GB)
$targetGB = 8

# 检查 PowerShell 位数
if (-not [Environment]::Is64BitProcess) {
    Write-Host "错误:当前 PowerShell 是32位,无法分配大内存。请使用64位PowerShell。" -ForegroundColor Red
    exit 1
}

# 初始块大小(64MB)
$blockSize = 64 * 1024 * 1024  # 64MB
$minBlockSize = 1 * 1024 * 1024  # 1MB(最小回退值)

$totalNeeded = $targetGB * 1GB
$blocks = @()
$totalAllocated = 0

Write-Host "目标内存: $targetGB GB" -ForegroundColor Cyan
Write-Host "尝试使用块大小: $($blockSize/1MB) MB" -ForegroundColor Yellow

while ($totalAllocated -lt $totalNeeded -and $blockSize -ge $minBlockSize) {
    try {
        # 计算当前块大小下还需多少块
        $remaining = $totalNeeded - $totalAllocated
        $numBlocks = [math]::Ceiling($remaining / $blockSize)

        for ($i = 0; $i -lt $numBlocks; $i++) {
            # 创建字节数组
            $block = New-Object byte[] $blockSize

            # 遍历每个页面写入,强制物理内存分配(4KB步长)
            for ($j = 0; $j -lt $blockSize; $j += 4*1024) {
                $block[$j] = 1
            }

            $blocks += $block
            $totalAllocated += $blockSize
            $percent = [math]::Round($totalAllocated / $totalNeeded * 100, 1)
            Write-Host "已分配: $($totalAllocated/1GB) GB ($percent%)" -ForegroundColor Green
        }
    }
    catch {
        # 分配失败,可能块太大
        Write-Host "使用块大小 $($blockSize/1MB) MB 失败: $_" -ForegroundColor Red
        $blockSize = $blockSize / 2  # 减半重试
        if ($blockSize -ge $minBlockSize) {
            Write-Host "尝试减小块大小为 $($blockSize/1MB) MB 继续..." -ForegroundColor Yellow
            # 清除已分配的部分?通常不需要,但可以继续追加
        } else {
            Write-Host "块大小已降至最小,无法继续分配。" -ForegroundColor Red
            break
        }
    }
}

if ($totalAllocated -ge $totalNeeded) {
    Write-Host "`n成功占用 $($totalAllocated/1GB) GB 物理内存!" -ForegroundColor Green
} else {
    Write-Host "`n仅占用了 $($totalAllocated/1GB) GB,未达到目标 $targetGB GB。" -ForegroundColor Yellow
}

Write-Host "按 Enter 释放内存并退出..."
$null = Read-Host

# 释放内存
$blocks.Clear()
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
Write-Host "内存已释放。" -ForegroundColor Red