ค้นหาเว็บไซต์

วิธีกำหนดโหลด CPU และการทดสอบความเครียดสูงบน Linux โดยใช้เครื่องมือ 'Stress-ng'


ในฐานะผู้ดูแลระบบ คุณอาจต้องการตรวจสอบและตรวจสอบสถานะของระบบ Linux ของคุณเมื่ออยู่ภายใต้ความเครียดของภาระงานสูง นี่อาจเป็นวิธีที่ดีสำหรับผู้ดูแลระบบและโปรแกรมเมอร์ในการ:

  1. ปรับแต่งกิจกรรมบนระบบ
  2. ตรวจสอบอินเทอร์เฟซเคอร์เนลของระบบปฏิบัติการ
  3. ทดสอบส่วนประกอบฮาร์ดแวร์ Linux ของคุณ เช่น CPU, หน่วยความจำ, อุปกรณ์ดิสก์ และอื่นๆ อีกมากมาย เพื่อสังเกตประสิทธิภาพการทำงานภายใต้ความเครียด
  4. วัดโหลดการใช้พลังงานที่แตกต่างกันบนระบบ

ในคู่มือนี้ เราจะดูเครื่องมือสำคัญสองอย่าง stress และ stress-ng สำหรับการทดสอบความเครียดภายใต้ระบบ Linux ของคุณ

1. ความเครียด – เป็นเครื่องมือสร้างภาระงานที่ออกแบบมาเพื่อให้ระบบของคุณมีการวัด CPU, หน่วยความจำ, I/O และความเครียดของดิสก์ที่กำหนดค่าได้

2. stress-ng – คือเวอร์ชันอัปเดตของเครื่องมือสร้างภาระงานความเครียด ซึ่งจะทดสอบระบบของคุณเพื่อดูคุณสมบัติต่อไปนี้:

  1. การคำนวณซีพียู
  2. ขับความเครียด
  3. การซิงค์ I/O
  4. ไปป์ I/O
  5. การฟาดแคช
  6. ความเครียดของวีเอ็ม
  7. ซ็อกเก็ตเน้น
  8. การสร้างและการยุติกระบวนการ
  9. คุณสมบัติการสลับบริบท

แม้ว่าเครื่องมือเหล่านี้จะดีสำหรับการตรวจสอบระบบของคุณ แต่ผู้ใช้ระบบคนใดไม่ควรใช้เครื่องมือเหล่านี้เท่านั้น

ข้อสำคัญ: ขอแนะนำอย่างยิ่งให้คุณใช้เครื่องมือเหล่านี้ด้วยสิทธิ์ผู้ใช้รูท เนื่องจากเครื่องมือเหล่านี้อาจทำให้เครื่อง Linux ของคุณเครียดได้อย่างรวดเร็ว และเพื่อหลีกเลี่ยงข้อผิดพลาดของระบบบางอย่างกับฮาร์ดแวร์ที่ออกแบบมาไม่ดี .

วิธีการติดตั้งเครื่องมือ 'ความเครียด' ใน Linux

หากต้องการติดตั้งเครื่องมือความเครียดบน Debian และอนุพันธ์เช่น Ubuntu และ Mint ให้รันคำสั่งต่อไปนี้

sudo apt-get install stress

หากต้องการติดตั้งความเครียดบน RHEL/CentOS และ Fedora Linux คุณต้องเปิดที่เก็บ EPEL แล้วพิมพ์คำสั่ง yum ต่อไปนี้เพื่อติดตั้ง เดียวกัน:

yum install stress

ไวยากรณ์ทั่วไปสำหรับการใช้ ความเครียด คือ:

sudo stress option argument

ตัวเลือกบางอย่างที่คุณสามารถใช้กับ ความเครียด

  1. หากต้องการวางคนงาน N ที่ทำงานบนฟังก์ชัน sqrt() ให้ใช้ตัวเลือก –cpu N ดังต่อไปนี้
  2. หากต้องการวางไข่คนงาน N ที่ทำงานบนฟังก์ชัน sync() ให้ใช้ตัวเลือก –io N ดังต่อไปนี้
  3. หากต้องการวางคนงาน N ที่ทำงานบนฟังก์ชัน malloc()/free() ให้ใช้ตัวเลือก –vm N
  4. หากต้องการจัดสรรหน่วยความจำต่อผู้ปฏิบัติงาน vm ให้ใช้ตัวเลือก –vm-bytes N
  5. แทนที่จะปล่อยและจัดสรรทรัพยากรหน่วยความจำใหม่ คุณสามารถเปลี่ยนหน่วยความจำได้โดยใช้ตัวเลือก –vm-keep
  6. ตั้งค่าโหมดสลีปเป็น N วินาทีก่อนที่จะเพิ่มหน่วยความจำโดยใช้ตัวเลือก –vm-hang N
  7. หากต้องการ วางไข่ N ผู้ปฏิบัติงานที่ทำงานบนฟังก์ชัน write()/unlink() ให้ใช้ตัวเลือก –hdd N
  8. คุณสามารถตั้งค่าการหมดเวลาหลังจาก N วินาทีได้โดยใช้ตัวเลือก –หมดเวลา N
  9. ตั้งค่าปัจจัยการรอเป็น N ไมโครวินาทีก่อนที่งานจะเริ่มต้นโดยใช้ตัวเลือก –backoff N ดังต่อไปนี้
  10. หากต้องการแสดงข้อมูลโดยละเอียดเพิ่มเติมเมื่อเกิดความเครียด ให้ใช้ตัวเลือก -v
  11. ใช้ –help เพื่อดูความช่วยเหลือในการใช้ความเครียดหรือดู manpage

ฉันจะใช้ความเครียดบนระบบ Linux ได้อย่างไร

1. หากต้องการตรวจสอบผลกระทบของคำสั่งทุกครั้งที่คุณเรียกใช้ ขั้นแรกให้เรียกใช้คำสั่ง uptime และจดบันทึกค่าเฉลี่ยการโหลด

จากนั้น รันคำสั่ง stress เพื่อสร้างคนงาน 8 คนที่กำลังหมุนอยู่บน sqrt() โดยมีเวลา 20 วินาที หลังจากเกิดความเครียดแล้ว ให้รันคำสั่ง uptime อีกครั้ง และเปรียบเทียบค่าเฉลี่ยการโหลด


tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu  8 --timeout 20
tecmint@tecmint ~ $ uptime
ผลลัพธ์ตัวอย่าง
tecmint@tecmint ~ $ uptime    
 17:20:00 up  7:51,  2 users,  load average: 1.91, 2.16, 1.93     [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 8 --timeout 20
stress: info: [17246] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
stress: info: [17246] successful run completed in 21s
tecmint@tecmint ~ $ uptime
 17:20:24 up  7:51,  2 users,  load average: 5.14, 2.88, 2.17     [<-- Watch Load Average]

2. หากต้องการวางคนงาน 8 คนที่หมุนบน sqrt() โดยหมดเวลา 30 วินาที โดยแสดงข้อมูลโดยละเอียดเกี่ยวกับการดำเนินการ ให้รันคำสั่งนี้:

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
tecmint@tecmint ~ $ uptime
ผลลัพธ์ตัวอย่าง
tecmint@tecmint ~ $ uptime
 17:27:25 up  7:58,  2 users,  load average: 1.40, 1.90, 1.98     [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 8 -v --timeout 30s
stress: info: [17353] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd
stress: dbug: [17353] using backoff sleep of 24000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 8 [17354] forked
stress: dbug: [17353] using backoff sleep of 21000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 7 [17355] forked
stress: dbug: [17353] using backoff sleep of 18000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 6 [17356] forked
stress: dbug: [17353] using backoff sleep of 15000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 5 [17357] forked
stress: dbug: [17353] using backoff sleep of 12000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 4 [17358] forked
stress: dbug: [17353] using backoff sleep of 9000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 3 [17359] forked
stress: dbug: [17353] using backoff sleep of 6000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 2 [17360] forked
stress: dbug: [17353] using backoff sleep of 3000us
stress: dbug: [17353] setting timeout to 30s
stress: dbug: [17353] --> hogcpu worker 1 [17361] forked
stress: dbug: [17353] tecmint@tecmint ~ $ uptime
 17:27:59 up  7:59,  2 users,  load average: 5.41, 2.82, 2.28     [<-- Watch Load Average]

3. หากต้องการขยายฟังก์ชัน malloc() และ free() หนึ่งคนโดยมีการหมดเวลา 60 วินาที รันคำสั่งต่อไปนี้

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s 
tecmint@tecmint ~ $ uptime
ผลลัพธ์ตัวอย่าง
tecmint@tecmint ~ $ uptime
 17:34:07 up  8:05,  2 users,  load average: 1.54, 2.04, 2.11     [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --vm 1 --timeout 60s 
stress: info: [17420] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
stress: info: [17420] successful run completed in 60s
tecmint@tecmint ~ $ uptime
 17:35:20 up  8:06,  2 users,  load average: 2.45, 2.24, 2.17     [<-- Watch Load Average]

4. หากต้องการกระจายคนงาน 4 คนที่หมุนบน sqrt() คนงาน 2 คนจะสลับกันบน sync() คนงาน 2 คนบน malloc()/free() โดยหมดเวลา 20 วินาทีและจัดสรรหน่วยความจำเป็น 256MB ต่อผู้ปฏิบัติงาน vm เรียกใช้คำสั่งนี้ด้านล่าง

tecmint@tecmint ~ $ uptime
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s 
tecmint@tecmint ~ $ uptime
ผลลัพธ์ตัวอย่าง
tecmint@tecmint ~ $ uptime
 17:40:33 up  8:12,  2 users,  load average: 1.68, 1.84, 2.02     [<-- Watch Load Average]
tecmint@tecmint ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
stress: info: [17501] dispatching hogs: 4 cpu, 3 io, 2 vm, 0 hdd
stress: info: [17501] successful run completed in 20s
tecmint@tecmint ~ $ uptime
 17:40:58 up  8:12,  2 users,  load average: 4.63, 2.54, 2.24     [<-- Watch Load Average]