ฉันต้องการสร้างการโหลดเกือบ 100% บนเครื่อง Linux มันเป็นระบบควอดคอร์และฉันต้องการให้แกนทั้งหมดเต็มความเร็ว เป็นการดีที่ภาระของ CPU จะคงอยู่ตามระยะเวลาที่กำหนดจากนั้นจึงหยุด ฉันหวังว่าจะมีเคล็ดลับในการทุบตี ฉันกำลังคิดวนรอบไม่สิ้นสุดบางอย่าง
ฉันต้องการสร้างการโหลดเกือบ 100% บนเครื่อง Linux มันเป็นระบบควอดคอร์และฉันต้องการให้แกนทั้งหมดเต็มความเร็ว เป็นการดีที่ภาระของ CPU จะคงอยู่ตามระยะเวลาที่กำหนดจากนั้นจึงหยุด ฉันหวังว่าจะมีเคล็ดลับในการทุบตี ฉันกำลังคิดวนรอบไม่สิ้นสุดบางอย่าง
คำตอบ:
คุณยังสามารถทำ
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
เพื่อฆ่ากระบวนการที่คุณสร้างเท่านั้น
ฉันใช้ความเครียดสำหรับสิ่งนี้คุณสามารถบอกได้ว่ามีกี่คอร์ให้สูงสุดออกมา .. มันช่วยให้หน่วยความจำและดิสก์เครียดได้เช่นกัน
ตัวอย่างการเน้น 2 คอร์เป็นเวลา 60 วินาที
stress --cpu 2 --timeout 60
sudo yum install stress
EPEL
ธุรกรรมซื้อคืน CentOSwget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo apt-get install stress
บนระบบที่ใช้เดเบียนเพื่อความสมบูรณ์ ใช้วิธีนี้ในการทดสอบการระบายความร้อนพอควรบนIntel i7 NUC Kit
ฉันคิดว่าอันนี้ง่ายกว่ามาก เปิด Terminal แล้วพิมพ์คำสั่งต่อไปนี้แล้วกด Enter
yes > /dev/null &
หากต้องการใช้ CPU ที่ทันสมัยอย่างเต็มที่หนึ่งบรรทัดไม่เพียงพอคุณอาจต้องทำซ้ำคำสั่งเพื่อใช้พลังงาน CPU ทั้งหมด
เพื่อวางทั้งหมดนี้เพียงแค่ใส่
killall yes
ตอนแรกมีการค้นพบความคิดที่นี่แม้ว่าจะมีไว้สำหรับผู้ใช้ Mac แต่สิ่งนี้ควรใช้ได้กับ * ระวังด้วยเช่นกัน
yes
คำสั่ง (สมมติว่าระบบไม่ได้ใช้งาน)
แม้ว่าฉันจะมาช้าไปงานปาร์ตี้โพสต์นี้เป็นหนึ่งในผลลัพธ์ยอดนิยมในการค้นหา google "สร้างโหลดใน linux"
ผลลัพธ์ที่ทำเครื่องหมายว่าเป็นโซลูชันสามารถใช้สร้างภาระของระบบได้ฉันต้องการใช้sha1sum /dev/zero
เพื่อกำหนดภาระบน cpu-core
แนวคิดคือการคำนวณผลรวมแฮชจากดาต้าสตรีมที่ไม่มีที่สิ้นสุด (เช่น. / dev / ศูนย์, / dev / urandom, ... ) กระบวนการนี้จะพยายามหาซีพียูหลักออกมาจนสุดจนกว่ากระบวนการจะถูกยกเลิก หากต้องการสร้างโหลดสำหรับแกนเพิ่มเติมคุณสามารถไพพ์คำสั่งหลายคำพร้อมกันได้
เช่น. สร้างภาระ 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 สูงสุด แต่จะไม่กระทบกับกระบวนการอื่น ๆ
ในการโหลด 3 คอร์เป็นเวลา 5 วินาที:
seq 3 | xargs -P0 -n1 timeout 5 yes > /dev/null
สิ่งนี้ส่งผลให้โหลดเคอร์เนลสูง (sys) จากการเรียกของระบบ write () จำนวนมาก
หากคุณต้องการโหลดซีพียู userland เป็นส่วนใหญ่:
seq 3 | xargs -P0 -n1 timeout 5 md5sum /dev/zero
หากคุณต้องการให้โหลดดำเนินการต่อไปจนกว่าคุณจะกด Ctrl-C:
seq 3 | xargs -P0 -n1 md5sum /dev/zero
นี่คือโปรแกรมที่คุณสามารถดาวน์โหลดได้ที่นี่
ติดตั้งได้อย่างง่ายดายบนระบบ Linux ของคุณ
./configure
make
make install
และเปิดมันในบรรทัดคำสั่งง่ายๆ
stress -c 40
เพื่อเน้นซีพียูทั้งหมดของคุณ (แต่คุณมี) โดยมี 40 เธรดแต่ละตัวรันการsqrt
คำนวณที่ซับซ้อนกับตัวเลขที่สร้างขึ้นแบบ ramdomly
คุณสามารถกำหนดการหมดเวลาของโปรแกรมได้
stress -c 40 -timeout 10s
แตกต่างจากโซลูชันที่เสนอด้วยdd
คำสั่งซึ่งเกี่ยวข้องกับIO
ดังนั้นจึงไม่เกินระบบของคุณเพราะทำงานกับข้อมูล
โปรแกรมความเครียดทำให้ระบบทำงานหนักเกินไปเพราะต้องรับมือกับการคำนวณ
stress
คำสั่งอยู่แล้ว ดังที่คำตอบนั้นบอกว่าคุณสามารถติดตั้งผ่าน yum / apt / etc
:(){ :|:& };:
ส้อมระเบิดนี้จะทำให้เกิดความเสียหายกับซีพียูและอาจทำให้คอมพิวเตอร์ของคุณเสียหาย
การวนซ้ำไม่สิ้นสุดเป็นความคิดที่ฉันมี สิ่งที่ดูประหลาดคือ:
while :; do :; done
( :
เหมือนกับtrue
ไม่ทำอะไรเลยและออกจากศูนย์)
คุณสามารถเรียกสิ่งนั้นในเชลล์ย่อยและทำงานในพื้นหลัง การทำเช่นนั้น$num_cores
ควรจะเพียงพอ หลังจากนอนหลับเวลาที่ต้องการคุณสามารถฆ่าพวกเขาทั้งหมดที่คุณได้รับ PIDs ด้วยjobs -p
(คำใบ้: xargs
)
ฉันจะแบ่งเนื้อหาออกเป็น 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
#!/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
ฉันใช้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
while [ 1 ]
do
#Your code goes here
done
:-)
ฉันผ่านอินเทอร์เน็ตเพื่อค้นหาสิ่งที่ชอบและพบสคริปต์ค้อนซีพียูที่มีประโยชน์มาก
#!/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
NUM_PROC=${1:-10}
ประโยคถ้า-แล้วอย่างอื่นจะถูกแทนที่โดย:
ใช้ตัวอย่างที่กล่าวถึงที่นี่ แต่ยังได้รับความช่วยเหลือจาก IRC ฉันได้พัฒนาสคริปต์ทดสอบความเครียดของ CPU ของฉันเอง มันใช้ subshell ต่อเธรดและเทคนิคการวนรอบไม่สิ้นสุด คุณยังสามารถระบุจำนวนเธรดและระยะเวลาแบบโต้ตอบ
#!/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
นี่เป็นเคล็ดลับสำหรับฉัน:
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
และมันไม่ใช้อะไรนอกจากทุบตี
เพื่อปรับปรุงคำตอบของ dimba และให้สิ่งที่เพิ่มเติมได้ pluggable (เพราะฉันต้องการสิ่งที่คล้ายกัน) ฉันได้เขียนสิ่งต่อไปนี้โดยใช้แนวคิด load-up 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
ฉันรวมคำตอบบางคำและเพิ่มวิธีวัดความเครียดให้กับซีพียูที่มีอยู่ทั้งหมด:
#!/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's dd if=/dev/zero of=/dev/null
นั้นถูกต้องอย่างแน่นอน แต่ก็มีค่าที่ต้องกล่าวถึงคือการยืนยันการใช้งาน CPU สูงสุดถึง 100% คุณสามารถทำได้ด้วย
ps -axro pcpu | awk '{sum+=$1} END {print sum}'
สิ่งนี้จะถามเอาต์พุต ps ของการใช้ cpu เฉลี่ย 1 นาทีโดยแต่ละโพรเซสแล้วบวกด้วย awk ในขณะที่มันเฉลี่ย 1 นาที ps นั้นฉลาดพอที่จะรู้ว่ากระบวนการมีเพียงไม่กี่วินาทีและปรับหน้าต่างตามเวลา ดังนั้นคุณสามารถใช้คำสั่งนี้เพื่อดูผลลัพธ์ได้ทันที
เพื่อเพิ่มโหลดหรือใช้ CPU 100%
sha1sum /dev/zero &
จากนั้นคุณจะเห็นการใช้งาน CPU โดยพิมพ์คำสั่ง
top
เพื่อปล่อยโหลด
killall sha1sum
เพียงแค่วางเด็กเลวนี้ใน SSH หรือคอนโซลของเซิร์ฟเวอร์ใด ๆ ที่ใช้ linux คุณสามารถฆ่ากระบวนการด้วยตนเอง แต่ฉันเพิ่งปิดเซิร์ฟเวอร์เมื่อฉันทำเสร็จเร็วขึ้น
แก้ไข: ฉันได้อัปเดตสคริปต์นี้เพื่อให้มีคุณสมบัติตัวจับเวลาเพื่อให้ไม่จำเป็นต้องฆ่ากระบวนการ
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