我想在Linux机器上创建一个接近100%的负载。这是四核系统,我要所有核都全速运转。理想情况下,CPU负载将持续一段指定的时间,然后停止。我希望bash里有什么妙招。我在想某种无限循环。
当前回答
Dimba的dd if=/dev/zero of=/dev/null绝对是正确的,但值得一提的是验证cpu使用率最大化到100%。你可以用
ps -axro pcpu | awk '{sum+=$1} END {print sum}'
它要求每个进程的1分钟平均cpu使用量的ps输出,然后将它们与awk相加。虽然它是1分钟的平均值,但ps足够聪明,可以知道一个进程是否只运行了几秒钟,并相应地调整时间窗口。因此,您可以使用此命令立即查看结果。
其他回答
我结合了一些答案,并添加了一种将压力扩展到所有可用cpu的方法:
#!/bin/bash
function infinite_loop {
while [ 1 ] ; do
# Force some computation even if it is useless to actually work the CPU
echo $((13**99)) 1>/dev/null 2>&1
done
}
# Either use environment variables for DURATION, or define them here
NUM_CPU=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
PIDS=()
for i in `seq ${NUM_CPU}` ;
do
# Put an infinite loop on each CPU
infinite_loop &
PIDS+=("$!")
done
# Wait DURATION seconds then stop the loops and quit
sleep ${DURATION}
# Parent kills its children
for pid in "${PIDS[@]}"
do
kill $pid
done
加载3个核5秒:
seq 3 | xargs -P0 -n1 timeout 5 yes > /dev/null
这将导致许多write()系统调用带来的高内核(sys)负载。
如果你更喜欢用户区cpu负载:
seq 3 | xargs -P0 -n1 timeout 5 md5sum /dev/zero
如果你只是想继续加载,直到按下Ctrl-C:
seq 3 | xargs -P0 -n1 md5sum /dev/zero
虽然我迟到了,但这篇文章是谷歌搜索“在linux中生成负载”的顶级结果之一。
标记为solution的结果可以用来生成系统负载,我更倾向于使用sha1sum /dev/zero来对cpu内核施加负载。
其思想是从一个无限的数据流(例如。/dev/zero, /dev/urandom,…)该进程将尝试最大化一个cpu-core,直到进程终止。 要为更多内核生成负载,可以将多个命令连接在一起。
如。产生2个核心负荷: Sha1sum /dev/zero | Sha1sum /dev/zero
一个核心(不调用外部进程):
while true; do true; done
两个核心:
while true; do /bin/true; done
后者只会让我的两个都达到50%…
这将使两者都达到100%:
while true; do echo; done
只需将这个坏小子粘贴到任何运行linux的服务器的SSH或控制台。您可以手动终止进程,但我只是在完成后关闭服务器,这样更快。
编辑:我已经更新了这个脚本,现在有一个定时器功能,这样就不需要杀死进程。
read -p "Please enter the number of minutes for test >" MINTEST && [[ $MINTEST == ?(-)+([0-9]) ]]; NCPU="$(grep -c ^processor /proc/cpuinfo)"; ((endtime=$(date +%s) + ($MINTEST*60))); NCPU=$((NCPU-1)); for ((i=1; i<=$NCPU; i++)); do while (($(date +%s) < $endtime)); do : ; done & done