วิธีสร้างโหลด CPU บนเซิร์ฟเวอร์ Linux


13

ฉันต้องการทดสอบการโหลดปลอมบนเซิร์ฟเวอร์ฉันกำลังค้นหายูทิลิตีบรรทัดคำสั่งเบิร์นอินหรือเบนช์มาร์กที่จะสร้างโหลด CPU บนระบบ

ฉันต้องการเบิร์นอินเฉพาะ CPU (ไม่มีฮาร์ดดิสโหลดเครือข่ายและ co) และฉันจะสามารถกำหนดช่วงเวลาที่โหลดจะทำงานได้ หมายความว่าฉันต้องการบางสิ่งที่จะสามารถทำงานได้: โหลด CPU เป็นเวลา 10 นาทีในระบบ

ความคิดใด ๆ

คำตอบ:



6

ฉันเลือกจุดลอยตัวล่วงหน้า:

for i in `seq 64`; do perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $sqrt = sqrt($j) for (1..9999); }' & done

ระวังหมายเลขซีพียูของคุณ :-)


ฉันจะทำtimeสิ่งนี้ได้อย่างไร
Sébastien

2

นี่คือสิ่งที่ฉันต้องการทำบ่อย ๆ แต่ฉันไม่มีวิธีที่ดีในการทำมัน ฉันเพิ่งเขียนสคริปต์ Perl ขนาดเล็กที่จะวนซ้ำเป็นเวลาหลายวินาทีตามที่ฉันต้องการ

เช่น (สำหรับ 10 นาที):

perl -e '$z=time()+(10*60); while (time()<$z) { $j++; $j *= 1.1 for (1..9999); }'

แน่นอนถ้าคุณมีโปรเซสเซอร์nตัวคุณอาจต้องการเพิ่ม bash loop เพื่อสร้างโพรเซสนั้น

#!/bin/bash
# e.g. for 4 processors
for i in 1 2 3 4; do
    perl -e .... &
done
wait

4
จุดเล็ก ๆ น้อย ๆ : forวงนั้นจะไม่วิ่งวนเป็นอนุกรมแทนที่จะขนานกันหรือ ฉันคิดว่า(perl -e '...' &)การแยกพวกเขาออกจากเปลือกจะทำหน้าที่ได้
SmallClanger

คุณถูก. ฉันจะแก้ไขโพสต์ของฉัน ขอบคุณสำหรับการชี้ให้เห็นว่า
PP



1

นี่คือเปลือกบริสุทธิ์ (อย่างน้อยbash& ksh) วิธีที่ฉันโพสต์แล้วเป็นคำตอบสำหรับคำถามที่คล้ายกันที่นี่

# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
  (
    pids=""
    cpus=${1:-1}
    seconds=${2:-60}
    echo loading $cpus CPUs for $seconds seconds
    trap 'for p in $pids; do kill $p; done' 0
    for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
    sleep $seconds
  )
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.