Answers:
你也可以
dd if=/dev/zero of=/dev/null
要运行更多这些以在更多核心上施加负载,请尝试分叉它:
fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd
将花括号中的命令重复执行要产生的线程数(此处为4个线程)多次。简单的回车命中将停止它(只要确保没有其他dd正在此用户上运行,或者您也杀死了它)。
/dev/zero
和写入/dev/null
不是一个很好的负载生成器-您必须运行很多负载生成大量负载。最好做类似的事情dd if=/dev/urandom | bzip2 -9 >> /dev/null
。/dev/urandom
需要大量的精力来生成输出,并且bzip2
将花费大量的精力来尝试压缩它,因此总体CPU使用率要比“用零填充一个块然后丢弃它”高得多。
jobs -p | xargs kill
只杀了你所创建的过程。
sudo yum install stress
EPEL
回购CentOSwget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
brew
install stress
同样由于某些原因,我不得不在四核MBPr上指定8个内核
sudo apt-get install stress
在基于debian的系统上,以确保完整性。用于测试Intel i7 NUC套件上的散热模块。
我认为这更简单。打开终端并输入以下内容,然后按Enter。
yes > /dev/null &
要充分利用现代CPU,仅一行是不够的,您可能需要重复此命令以耗尽所有CPU功率。
要结束所有这些,只需将
killall yes
这个主意最初是在这里找到的,尽管它是针对Mac用户的,但它也适用于* nix。
yes
命令的总负载为25%(假设系统处于空闲状态)。
尽管我参加聚会的时间很晚,但这篇文章是google搜索“ generate load in linux”的最佳搜索结果之一。
标记为解决方案的结果可用于生成系统负载,我更喜欢用于sha1sum /dev/zero
对cpu-core施加负载。
这个想法是从一个无限的数据流(例如/ dev / zero,/ dev / urandom等)中计算一个哈希总和,该过程将尝试使CPU核心最大化,直到该过程中止。为了产生更多内核的负载,可以将多个命令传递到一起。
例如。产生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
renice 19 -p $$
。它仍将使CPU达到最大值,但不会影响其他进程。
这是您可以在此处下载的程序
在Linux系统上轻松安装
./configure
make
make install
并在一个简单的命令行中启动它
stress -c 40
用40个线程(每个线程运行一个复杂的线程)对所有CPU(无论有多大)施加压力 sqrt
对随机生成的数字计算。
您甚至可以定义程序超时
stress -c 40 -timeout 10s
与建议的dd
命令解决方案不同,该命令本质上涉及IO
,因此不会因为处理数据而真正使系统过载。
压力程序确实因为处理计算而使系统过载。
stress
命令的答案。就像那个答案所说,您可以通过yum / apt / etc安装它。
:(){ :|:& };:
此叉子炸弹会对CPU造成破坏,并可能使计算机崩溃。
我会把事情分成两个脚本:
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
duration=120 # seconds
instances=4 # cpus
endtime=$(($(date +%s) + $duration))
for ((i=0; i<instances; i++))
do
while (($(date +%s) < $endtime)); do :; done &
done
使用这里提到的示例以及IRC的帮助,我开发了自己的CPU压力测试脚本。它使用每个线程一个子外壳和无穷循环技术。您还可以交互地指定线程数和时间。
#!/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
利用这里的想法,创建的代码将在设定的持续时间后自动退出,而不必杀死进程-
#!/bin/bash
echo "Usage : ./killproc_ds.sh 6 60 (6 threads for 60 secs)"
# Define variables
NUM_PROCS=${1:-6} #How much scaling you want to do
duration=${2:-20} # seconds
function infinite_loop {
endtime=$(($(date +%s) + $duration))
while (($(date +%s) < $endtime)); do
#echo $(date +%s)
echo $((13**99)) 1>/dev/null 2>&1
$(dd if=/dev/urandom count=10000 status=none| bzip2 -9 >> /dev/null) 2>&1 >&/dev/null
done
echo "Done Stressing the system - for thread $1"
}
echo Running for duration $duration secs, spawning $NUM_PROCS threads in background
for i in `seq ${NUM_PROCS}` ;
do
# Put an infinite loop
infinite_loop $i &
done
为了增强dimba的答案并提供更可插入的内容(因为我需要类似的内容)。我使用dd加载概念编写了以下内容:D
它将检查当前内核,并创建那么多dd线程。使用Enter开始和结束核心负载
#!/bin/bash
load_dd() {
dd if=/dev/zero of=/dev/null
}
fulload() {
unset LOAD_ME_UP_SCOTTY
export cores="$(grep proc /proc/cpuinfo -c)"
for i in $( seq 1 $( expr $cores - 1 ) )
do
export LOAD_ME_UP_SCOTTY="${LOAD_ME_UP_SCOTTY}$(echo 'load_dd | ')"
done
export LOAD_ME_UP_SCOTTY="${LOAD_ME_UP_SCOTTY}$(echo 'load_dd &')"
eval ${LOAD_ME_UP_SCOTTY}
}
echo press return to begin and stop fullload of cores
read
fulload
read
killall -9 dd
我结合了一些答案,并添加了一种将压力扩展到所有可用cpus的方法:
#!/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
Dimba dd if=/dev/zero of=/dev/null
绝对是正确的,但也值得一提的是验证cpu的使用率是否达到100%。你可以这样做
ps -axro pcpu | awk '{sum+=$1} END {print sum}'
这要求每个进程的ps输出为平均1分钟的CPU使用率,然后将其与awk相加。尽管平均时间是1分钟,但ps足够聪明,可以知道某个进程是否仅在几秒钟左右,并相应地调整时间窗口。因此,您可以使用此命令立即查看结果。
只需将这个坏男孩粘贴到运行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