Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เข้าใจ System Load และ Load Averages: ความหมายและความสำคัญ

Tools เช่น top, uptime, w และ host metrics ของ AppSignal รายงาน metric ชื่อ load average Metric นี้บอกเกี่ยวกับ load ที่ system อยู่ภายใต้ โดยเฉลี่ยหลาย timeframes

$ uptime
10:14:14 up 60 days, 17:42, 1 user, load average: 0.44, 0.28, 0.25

Load averages มักแสดงเป็น 3 ตัวเลข เช่นตัวอย่างจาก uptime ข้างต้น ตัวเลข 3 ตัวท้ายแสดง average load ในนาทีล่าสุด (0.44) 5 นาทีล่าสุด (0.28) และ 15 นาทีล่าสุด (0.25)

บน AppSignal load averages แสดงทุกนาทีสำหรับ 8 ชั่วโมงล่าสุด และทุกชั่วโมงสำหรับ timeframes ที่นานกว่านั้น

System Load

เพื่อเข้าใจว่า load averages บอกอะไร (และเมื่อไหร่ควรตื่นเต้น) เราต้องเข้าใจก่อนว่า system load หมายถึงอะไร และนับอย่างไร

Load ของ system โดยพื้นฐานคือจำนวน processes ที่ active ในเวลาใดเวลาหนึ่ง เมื่อ idle load คือ 0 เมื่อ process เริ่ม load เพิ่ม 1 Process ที่จบลด load ลง 1 นอกจาก running processes process ที่ queued up ก็ถูกนับด้วย ดังนั้น เมื่อมี process หนึ่งใช้ CPU อยู่ และอีกสองรอคิว load จะเป็น 3

Load กระตุกเร็วเพราะ short-lived processes และอาจกระโดดจากศูนย์เป็น 5 ใน milliseconds และกลับมาอีกทีถัดไป เนื่องจากความผันผวนนี้ ดู average load over time จึงมีประโยชน์มากกว่า ให้ภาพรวม load ที่ system อยู่ภายใต้ดีกว่า

Load Averages

ตอนนี้เรารู้แล้วว่า system load นับอย่างไร มาดู load averages ซึ่งเราเห็นว่า load ที่ system อยู่ภายใต้มักแสดงเป็น average over time

โดยทั่วไป single-core CPU จัดการ process ได้ทีละหนึ่ง Average load 1.0 หมายถึง one core busy 100% ของเวลา หาก load average ลดเหลือ 0.5 CPU idle 50% ของเวลา

หาก load average เพิ่มเป็น 1.5 CPU busy ตลอดเวลา ในขณะมี (เฉลี่ย) อีก process หนึ่งรอ 50% ของเวลา ให้ CPU งานมากกว่าที่จัดการได้

Logical Processors

กฎทั่วไปคือ load average ไม่ควรเกินจำนวน processors ในเครื่อง หากมี processors 4 ตัว load ควรอยู่ใต้ 4.0 โดยทั่วไป

จำไว้ว่า this relates to logical processors แทน physical ones บน CPU เนื่องจาก software abstractions เช่น hyper-threading จำนวน logical processors หรือ processing threads อาจสูงกว่า physical processor cores

เช็คจำนวน logical processors บน Linux โดยนับ processors ใน /proc/cpuinfo หรือ grep processor /proc/cpuinfo | wc -l จะพิมพ์จำนวน processor lines อัตโนมัติ

บน Mac ถาม sysctl ได้โดยตรงด้วย sysctl -n hw.ncpu

สำหรับระบบที่มี multiple logical processors load average อาจสูงกว่าได้ เพราะรัน concurrent processes มากขึ้น บนเครื่อง 2 CPU cores load average 2.0 หมายถึง both CPUs utilized 100% ในขณะมี 2 processes active เฉลี่ย

👋 ดูบทความ Ruby (on Rails) performance อื่นๆ ใน checklist การติดตามประสิทธิภาพ Ruby ของเราได้เลย

การอ่าน Load Averages

เนื่องจากเป็น average ของ absolute number of processes อาจดูยากที่จะกำหนด proper load average และเมื่อไหร่ควรตื่นเต้น โดยทั่วไป เนื่องจากแต่ละ CPU core จัดการ process ได้ทีละหนึ่ง system ไม่ overloaded จนกว่าจะเกิน 1.0 ต่อ logical processors บน dual-core system (ไม่มี hyper-threading) นั่นคือ 2.0

ปกติ fine ถ้า load average สูงกว่า 1.0 ต่อ core ใน last minute mark แต่ elevated load ใน five หรือ fifteen-minute averages อาจบ่งชี้ปัญหา

TIP: anomaly detection ของ AppSignal ใช้เปิด alert เมื่อ load average อยู่เหนือค่าหนึ่งเป็นระยะเวลา ใช้ warm-up setting เราจะส่งข้อความเมื่อ load อยู่เหนือ 1.5 เป็นเวลา 15 นาที ตัวอย่างเช่น

เราตอบคำถามเกี่ยว load averages ครบแล้วหรือยัง? หรือยังมีส่วนที่ไม่ชัดเจน? อย่าลังเลติดต่อเราที่ @AppSignal เรายินดีรู้ความคิดเห็นว่าชอบบทความนี้หรือไม่ หรือมีหัวข้ออื่นอยากรู้เพิ่มเติม