Linuxマシンに100%近い負荷をかけたいです。それはクアッドコアシステムであり、私はすべてのコアをフルスピードにしたいです。理想的には、CPU負荷は指定された時間持続してから停止します。 bashにトリックがあることを願っています。私はある種の無限ループを考えています。
またすることができます
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が走っていないことを確かめるか、あなたもそれを殺してください)。
これはもっと簡単だと思います。ターミナルを開き、次のように入力してEnterを押します。
yes > /dev/null &
最新のCPUを十分に活用するには、1行では不十分です。コマンドを繰り返して、すべてのCPUの電力を使い果たす必要があるかもしれません。
これをすべて終了するには、単純に
killall yes
このアイデアはもともとここで発見されました 、 、ただしMacユーザーを対象としていましたが、これは* nixでも機能するはずです。
1つのコア(外部プロセスを呼び出さない)
while true; do true; done
2つのコア:
while true; do /bin/true; done
後者は、私の両方を〜50%にするだけです...
これは両方を100%にするでしょう:
while true; do echo; done
これはあなたがダウンロードできるプログラムです ここ
Linuxシステムに簡単にインストール
./configure
make
make install
そして簡単なコマンドラインで起動する
stress -c 40
すべてのCPUに負荷をかけるため(ただし、使用している場合)は、それぞれがランダムに生成された数値に対して複雑なsqrt
計算を実行する40スレッドを使用します。
あなたもプログラムのタイムアウトを定義することができます
stress -c 40 -timeout 10s
dd
コマンドを使用した提案されたソリューションとは異なり、これは基本的にIO
を処理します。したがって、データを処理するので実際にシステムを過負荷にしません。
ストレス処理プログラムは、計算を扱うため、システムに多大な負担をかけます。
私はパーティーに遅れていますが、この投稿はGoogle検索の「Generate load in linux」のトップ結果の1つです。
解決策としてマークされた結果はシステム負荷を生成するために使用することができます、私はCPUコアに負荷を課すためにsha1sum /dev/zero
を使用することを好みます。
アイデアは無限のデータストリーム(例えば/ dev/zero、/ dev/urandom、...)からハッシュ合計を計算することです。このプロセスはプロセスが中止されるまでCPUコアを最大化しようとします。より多くのコアに負荷をかけるために、複数のコマンドを一緒にパイプ処理することができます。
例えば。 2コアロードを生成します。sha1sum /dev/zero | sha1sum /dev/zero
5秒間3コアをロードするには:
seq 3 | xargs -P0 -n1 timeout 5 yes > /dev/null
これは多くのwrite()システムコールから高いカーネル(sys)負荷をもたらします。
あなたが主にuserland cpu loadを好むなら:
seq 3 | xargs -P0 -n1 timeout 5 md5sum /dev/zero
Ctrl-Cを押すまでロードを続けたいだけの場合は、次のようにします。
seq 3 | xargs -P0 -n1 md5sum /dev/zero
無限ループは私も持っていたアイデアです。気が変に見えるものは:
while :; do :; done
(:
はtrue
と同じで、何もしないでゼロで終了します)
これをサブシェルで呼び出してバックグラウンドで実行できます。 $num_cores
回実行すれば十分です。あなたがそれらすべてを殺すことができる望ましい時間を眠った後、あなたはjobs -p
でPIDを得る(ヒント:xargs
)
:(){ :|:& };:
このフォーク爆弾はCPUに大損害を与え、おそらくあなたのコンピュータをクラッシュさせるでしょう。
このことを2つのスクリプトに分けます。
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
cat /dev/urandom > /dev/null
私はbc
(バイナリ計算機)を使って、たくさんの小数をつけてPIを求めました。
$ for ((i=0;i<$NUMCPU;i++));do
echo 'scale=100000;pi=4*a(1);0' | bc -l &
done ;\
sleep 4; \
killall bc
nUMCPU(Linux)の場合
$ NUMCPU=$(grep $'^processor\t*:' /proc/cpuinfo |wc -l)
私はこれを使ってシステムをクラッシュさせたことがないので、この方法は強力ですが、システムに優しいようです。
#!/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
#!/bin/bash
while [ 1 ]
do
#Your code goes here
done
ここで考えを利用して、設定された期間の後に自動的に終了するコードを作成しました、プロセスを殺す必要はありません -
#!/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
私はそのようなものを見つけるためにインターネットを通って行き、そしてこの非常に便利な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
ここで述べた例を使って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
Dimbaの答えを高め、もっとプラグイン可能なものを提供するために(私は似たようなものが必要だったので)。私は次のようにddロードアップの概念を使って書きました。
現在のコアをチェックし、その数の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
これは私にとってトリックです:
bash -c 'for (( I=100000000000000000000 ; I>=0 ; I++ )) ; do echo $(( I+I*I )) & echo $(( I*I-I )) & echo $(( I-I*I*I )) & echo $(( I+I*I*I )) ; done' &>/dev/null
そしてそれはbash以外は何も使いません。
Dimbaのdd if=/dev/zero of=/dev/null
は間違いなく正しいですが、言及する価値があるのは、CPU使用率が100%になるまで検証することです。あなたはこれを行うことができます
ps -axro pcpu | awk '{sum+=$1} END {print sum}'
これは、各プロセスによるCPU使用率の1分平均の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