วิธีกำหนดโหลด CPU และการทดสอบความเครียดสูงบน Linux โดยใช้เครื่องมือ 'Stress-ng'
ในฐานะผู้ดูแลระบบ คุณอาจต้องการตรวจสอบและตรวจสอบสถานะของระบบ Linux ของคุณเมื่ออยู่ภายใต้ความเครียดของภาระงานสูง นี่อาจเป็นวิธีที่ดีสำหรับผู้ดูแลระบบและโปรแกรมเมอร์ในการ:
- ปรับแต่งกิจกรรมบนระบบ
- ตรวจสอบอินเทอร์เฟซเคอร์เนลของระบบปฏิบัติการ
- ทดสอบส่วนประกอบฮาร์ดแวร์ Linux ของคุณ เช่น CPU, หน่วยความจำ, อุปกรณ์ดิสก์ และอื่นๆ อีกมากมาย เพื่อสังเกตประสิทธิภาพการทำงานภายใต้ความเครียด
- วัดโหลดการใช้พลังงานที่แตกต่างกันบนระบบ
ในคู่มือนี้ เราจะดูเครื่องมือสำคัญสองอย่าง stress และ stress-ng สำหรับการทดสอบความเครียดภายใต้ระบบ Linux ของคุณ
1. ความเครียด – เป็นเครื่องมือสร้างภาระงานที่ออกแบบมาเพื่อให้ระบบของคุณมีการวัด CPU, หน่วยความจำ, I/O และความเครียดของดิสก์ที่กำหนดค่าได้
2. stress-ng – คือเวอร์ชันอัปเดตของเครื่องมือสร้างภาระงานความเครียด ซึ่งจะทดสอบระบบของคุณเพื่อดูคุณสมบัติต่อไปนี้:
- การคำนวณซีพียู
- ขับความเครียด
- การซิงค์ I/O
- ไปป์ I/O
- การฟาดแคช
- ความเครียดของวีเอ็ม
- ซ็อกเก็ตเน้น
- การสร้างและการยุติกระบวนการ
- คุณสมบัติการสลับบริบท
แม้ว่าเครื่องมือเหล่านี้จะดีสำหรับการตรวจสอบระบบของคุณ แต่ผู้ใช้ระบบคนใดไม่ควรใช้เครื่องมือเหล่านี้เท่านั้น
ข้อสำคัญ: ขอแนะนำอย่างยิ่งให้คุณใช้เครื่องมือเหล่านี้ด้วยสิทธิ์ผู้ใช้รูท เนื่องจากเครื่องมือเหล่านี้อาจทำให้เครื่อง Linux ของคุณเครียดได้อย่างรวดเร็ว และเพื่อหลีกเลี่ยงข้อผิดพลาดของระบบบางอย่างกับฮาร์ดแวร์ที่ออกแบบมาไม่ดี .
วิธีการติดตั้งเครื่องมือ 'ความเครียด' ใน Linux
หากต้องการติดตั้งเครื่องมือความเครียดบน Debian และอนุพันธ์เช่น Ubuntu และ Mint ให้รันคำสั่งต่อไปนี้
sudo apt-get install stress
หากต้องการติดตั้งความเครียดบน RHEL/CentOS และ Fedora Linux คุณต้องเปิดที่เก็บ EPEL แล้วพิมพ์คำสั่ง yum ต่อไปนี้เพื่อติดตั้ง เดียวกัน:
yum install stress
ไวยากรณ์ทั่วไปสำหรับการใช้ ความเครียด คือ:
sudo stress option argument
ตัวเลือกบางอย่างที่คุณสามารถใช้กับ ความเครียด
- หากต้องการวางคนงาน N ที่ทำงานบนฟังก์ชัน sqrt() ให้ใช้ตัวเลือก –cpu N ดังต่อไปนี้
- หากต้องการวางไข่คนงาน N ที่ทำงานบนฟังก์ชัน sync() ให้ใช้ตัวเลือก –io N ดังต่อไปนี้
- หากต้องการวางคนงาน N ที่ทำงานบนฟังก์ชัน malloc()/free() ให้ใช้ตัวเลือก –vm N
- หากต้องการจัดสรรหน่วยความจำต่อผู้ปฏิบัติงาน vm ให้ใช้ตัวเลือก –vm-bytes N
- แทนที่จะปล่อยและจัดสรรทรัพยากรหน่วยความจำใหม่ คุณสามารถเปลี่ยนหน่วยความจำได้โดยใช้ตัวเลือก –vm-keep
- ตั้งค่าโหมดสลีปเป็น N วินาทีก่อนที่จะเพิ่มหน่วยความจำโดยใช้ตัวเลือก –vm-hang N
- หากต้องการ วางไข่ N ผู้ปฏิบัติงานที่ทำงานบนฟังก์ชัน write()/unlink() ให้ใช้ตัวเลือก –hdd N
- คุณสามารถตั้งค่าการหมดเวลาหลังจาก N วินาทีได้โดยใช้ตัวเลือก –หมดเวลา N
- ตั้งค่าปัจจัยการรอเป็น N ไมโครวินาทีก่อนที่งานจะเริ่มต้นโดยใช้ตัวเลือก –backoff N ดังต่อไปนี้
- หากต้องการแสดงข้อมูลโดยละเอียดเพิ่มเติมเมื่อเกิดความเครียด ให้ใช้ตัวเลือก -v
- ใช้ –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]