服务器CPU、内存和磁盘占用脚本
一、Linux
以下是一个简单的 C 程序,它会申请一定量的内存并一直持有它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdlib.h> #include <string.h> #include <unistd.h> int main( int argc, char *argv[]) { if (argc < 2) { return 1; } long memory_mb = atol (argv[1]); char *memory = malloc (memory_mb * 1024 * 1024); if (memory == NULL) { return 1; } memset (memory, 0, memory_mb * 1024 * 1024); sleep(1000000); return 0; } |
将这个程序保存为 `mem.c`,然后使用 gcc 编译它:
1 | gcc -o mem mem.c |
然后创建一个test.sh脚本文件,创建 CPU 、内存负载,下面是脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/bin/bash # CPU 占用设置 NUM_CORES=$(nproc) # 获取 CPU 核心数 MIN_LOAD=35 # 设置最低 CPU 占用率,如 35% MAX_LOAD=45 # 设置最高 CPU 占用率,如 45% SLEEP_SECONDS=10 # 设置占用率变动的间隔时间,如10秒 # 内存占用设置 TOTAL_MEMORY_KB=$( grep MemTotal /proc/meminfo | awk '{print $2}' ) # 获取总内存,单位是 KB MIN_TARGET_MEMORY_KB=$( echo "$TOTAL_MEMORY_KB*$MIN_LOAD/100" | bc ) # 计算最低目标内存,单位是 KB MAX_TARGET_MEMORY_KB=$( echo "$TOTAL_MEMORY_KB*$MAX_LOAD/100" | bc ) # 计算最高目标内存,单位是 KB while true ; do # 在最低和最高占用率之间随机选择一个目标占用率 TARGET_LOAD=$(shuf -i $MIN_LOAD-$MAX_LOAD -n 1) NUM_WORKERS=$( echo "$NUM_CORES*$TARGET_LOAD/100" | bc ) # 占用 CPU echo "Attempting to consume $TARGET_LOAD% of CPU..." for ((i=0; i<$NUM_WORKERS; i++)); do { while true ; do :; done } & PIDS[${i}]=$! # 保存每个子进程的 PID done # 在最低和最高目标内存之间随机选择一个目标内存大小 TARGET_MEMORY_KB=$(shuf -i $MIN_TARGET_MEMORY_KB-$MAX_TARGET_MEMORY_KB -n 1) TARGET_MEMORY_MB=$( echo "$TARGET_MEMORY_KB/1024" | bc ) # 占用内存 echo "Attempting to consume $TARGET_MEMORY_MB MB of memory..." . /mem $TARGET_MEMORY_MB & MEM_PID=$! # 保存 mem 程序的 PID # 等待一定时间后,杀掉所有子进程,并重新开始循环,以达到占用率和内存占用变动的目的 sleep $SLEEP_SECONDS for pid in ${PIDS[*]}; do kill -9 $pid done kill -9 $MEM_PID unset PIDS # 清空 PID 数组,以便下次循环使用 done |
运行:
1 | nohup bash test .sh & |
磁盘负载:
1 | dd if = /dev/zero of= /mytestdata bs=1M count=40000 |
其中:
if=/dev/zero 表示输入文件为 /dev/zero,它是一个特殊的文件,读取它将给出零值字节。
of=mytestdata 表示输出文件为 "mytestdata"。
bs=1m 表示以1M为单位进行复制。
count=40000 表示复制的数量为40000,因此总大小为40GB。
二、Windows
1. 创建 CPU 负载:这个 PowerShell 脚本将在后台启动一些循环,每个循环占用一个 CPU 核心。
1 2 3 4 5 6 7 8 9 10 | $processorCount = (Get-WmiObject -class Win32_computerSystem).NumberOfLogicalProcessors $minLoad = 0.35 $maxLoad = 0.45 $workerCount = [Math]::Round($processorCount * (Get-Random -Minimum $minLoad -Maximum $maxLoad)) for ($i=0; $i -lt $workerCount; $i++) { Start-Job -ScriptBlock { while ($ true ){} } } |
2. 创建内存负载:这个 PowerShell 脚本将在内存中创建一个大数组,从而占用内存。
1 2 3 4 5 6 | $totalMemory = (Get-WmiObject -class Win32_ComputerSystem).TotalPhysicalMemory / 1MB $minLoad = 0.35 $maxLoad = 0.45 $memoryToUse = [Math]::Round($totalMemory * (Get-Random -Minimum $minLoad -Maximum $maxLoad)) $null = new-object byte[] $memoryToUse |
3.磁盘负载
1 | fsutil file createnew largefile 53687091200 |
fsutil 是工具的名称
file 指示我们正在操作文件
createnew 是操作的名称,它表示我们想要创建一个新文件
largefile 是你想要创建的新文件的名称
53687091200 是新文件的大小,单位是字节。
所以,这个命令的整体意思就是:在当前目录下创建一个新文件,名为 "largefile",大小为53687091200字节。 53687091200字节等于50GB,因为1GB等于1073741824字节,所以50GB等于53687091200字节。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构