我想在Linux机器上创建一个接近100%的负载。这是四核系统,我要所有核都全速运转。理想情况下,CPU负载将持续一段指定的时间,然后停止。我希望bash里有什么妙招。我在想某种无限循环。


当前回答

使用这里提到的例子,以及IRC的帮助,我开发了自己的CPU压力测试脚本。它使用每个线程一个子shell和无限循环技术。您还可以交互地指定线程数和时间量。

#!/bin/bash
# Simple CPU stress test script

# Read the user's input
echo -n "Number of CPU threads to test: "
read cpu_threads
echo -n "Duration of the test (in seconds): "
read cpu_time

# Run an endless loop on each thread to generate 100% CPU
echo -e "\E[32mStressing ${cpu_threads} threads for ${cpu_time} seconds...\E[37m"
for i in $(seq ${cpu_threads}); do
    let thread=${i}-1
    (taskset -cp ${thread} $BASHPID; while true; do true; done) &
done

# Once the time runs out, kill all of the loops
sleep ${cpu_time}
echo -e "\E[32mStressing complete.\E[37m"
kill 0

其他回答

我会把它分成两个脚本:

infinite_loop。bash:

#!/bin/bash
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

cpu_spike。bash:

#!/bin/bash
# Either use environment variables for NUM_CPU and DURATION, or define them here
for i in `seq ${NUM_CPU}` : do
    # Put an infinite loop on each CPU
    infinite_loop.bash &
done

# Wait DURATION seconds then stop the loops and quit
sleep ${DURATION}
killall infinite_loop.bash
#!/bin/bash
while [ 1 ]
do
        #Your code goes here
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

我在互联网上找到了类似的东西,发现了这个非常方便的cpu锤子脚本。

#!/bin/sh

# unixfoo.blogspot.com

if [ $1 ]; then
    NUM_PROC=$1
else
    NUM_PROC=10
fi

for i in `seq 0 $((NUM_PROC-1))`; do
    awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &
done