เครื่องมือเช่น top
, uptime
, w
และเมตริกโฮสต์ของ AppSignal จะรายงานเมตริกที่เรียกว่า load average . เมตริกนี้จะบอกคุณเกี่ยวกับภาระที่ระบบของคุณได้รับ โดยเฉลี่ยในหลายกรอบเวลา
$ uptime
10:14:14 up 60 days, 17:42, 1 user, load average: 0.44, 0.28, 0.25
ค่าเฉลี่ยโหลดมักจะแสดงเป็นตัวเลขสามตัว เช่นในตัวอย่างจาก uptime
ข้างบน. ตัวเลขสามตัวท้ายผลลัพธ์แสดงโหลดเฉลี่ยในนาทีสุดท้าย (0.44
) ในช่วงห้านาทีที่ผ่านมา (0.28
) และ 15 อันสุดท้าย (0.25
)
ใน AppSignal ค่าเฉลี่ยการโหลดจะแสดงเป็นนาทีในช่วงแปดชั่วโมงที่ผ่านมา และต่อชั่วโมงสำหรับกรอบเวลาที่นานกว่านั้น
โหลดระบบ
เพื่อให้เข้าใจว่าค่าเฉลี่ยโหลดเหล่านี้บอกอะไรเรา (และเมื่อใดที่ควรตื่นตระหนก) ก่อนอื่นเราต้องเข้าใจ โหลดระบบ ความหมายและวิธีการนับ
ภาระของระบบโดยพื้นฐานแล้วคือจำนวนของกระบวนการที่ทำงานอยู่ ณ เวลาใดก็ตาม เมื่อไม่ได้ใช้งาน โหลดจะเป็น 0 เมื่อกระบวนการเริ่มต้น โหลดจะเพิ่มขึ้น 1 กระบวนการที่ยุติจะลดจำนวนการโหลดลง 1 นอกจากกระบวนการที่ทำงานอยู่ กระบวนการใดๆ ที่เข้าคิวจะถูกนับด้วย ดังนั้น เมื่อกระบวนการหนึ่งใช้งาน CPU อย่างแข็งขัน และอีกสองกระบวนการกำลังรอผลัดกัน โหลดจะเป็น 3
โหลดผันผวนอย่างรวดเร็วเนื่องจากกระบวนการที่มีระยะเวลาสั้น และสามารถกระโดดจากศูนย์เป็น 5 ในหน่วยมิลลิวินาที และกลับมาอีกครั้งในทันทีถัดไป เนื่องจากความผันผวนนี้ การดูโหลดเฉลี่ยในช่วงเวลาหนึ่งจึงมีประโยชน์มากกว่า ซึ่งให้ภาพรวมที่ดีขึ้นของการโหลดที่ระบบอยู่ภายใต้
โหลดเฉลี่ย
ตอนนี้เราทราบวิธีการนับโหลดของระบบแล้ว เราสามารถดูค่าเฉลี่ยโหลดได้ ดังที่เราได้เห็น โหลดที่ระบบอยู่ภายใต้มักจะแสดงเป็นค่าเฉลี่ยเมื่อเวลาผ่านไป
โดยทั่วไป CPU แบบ single-core สามารถจัดการได้ครั้งละหนึ่งกระบวนการ โหลดเฉลี่ย 1.0 จะหมายความว่าหนึ่งคอร์ไม่ว่าง 100% ของเวลาทั้งหมด หากค่าเฉลี่ยโหลดลดลงเหลือ 0.5 แสดงว่า CPU ไม่ได้ใช้งานเป็นเวลา 50%
หากค่าเฉลี่ยของโหลดเพิ่มขึ้นเป็น 1.5 แสดงว่า CPU ไม่ว่างตลอดเวลาในขณะที่มี (โดยเฉลี่ย) อีกกระบวนการหนึ่งรอ 50% ของเวลา ทำให้ CPU ทำงานได้มากกว่าที่จะจัดการได้
ตัวประมวลผลเชิงตรรกะ
กฎทั่วไปคือค่าเฉลี่ยโหลดไม่ควรเกินจำนวนโปรเซสเซอร์ในเครื่อง หากโปรเซสเซอร์มีสี่ตัว โดยทั่วไปโหลดควรต่ำกว่า 4.0
โปรดทราบว่าสิ่งนี้เกี่ยวข้องกับ ตัวประมวลผลเชิงตรรกะ แทนที่จะเป็นของจริงบน CPU เนื่องจากซอฟต์แวร์ที่เป็นนามธรรม เช่น ไฮเปอร์เธรดดิ้ง จำนวนตัวประมวลผลเชิงตรรกะ หรือเธรดการประมวลผล อาจมากกว่าจำนวนคอร์ของตัวประมวลผลจริง
ในการตรวจสอบจำนวนตัวประมวลผลเชิงตรรกะบน Linux ให้นับจำนวนโปรเซสเซอร์ที่แสดงใน /proc/cpuinfo
, หรือ grep processor /proc/cpuinfo | wc -l
ซึ่งจะพิมพ์จำนวนบรรทัดตัวประมวลผลโดยอัตโนมัติ
สำหรับ Mac คุณสามารถถาม sysctl
สำหรับจำนวนของตัวประมวลผลเชิงตรรกะโดยตรงโดยใช้ sysctl -n hw.ncpu
.
สำหรับระบบที่มีตัวประมวลผลแบบลอจิคัลหลายตัว ค่าเฉลี่ยของโหลดจะเพิ่มขึ้นได้ เนื่องจากสามารถรันกระบวนการที่เกิดขึ้นพร้อมกันได้มากกว่า ในเครื่องที่มีแกน CPU สองคอร์ ค่าเฉลี่ยโหลด 2.0 หมายความว่า CPU ทั้งสองมีการใช้งาน 100% ในขณะที่สองกระบวนการทำงานโดยเฉลี่ย
👋 ดูบทความเกี่ยวกับประสิทธิภาพของ Ruby (on Rails) อื่นๆ ในรายการตรวจสอบการตรวจสอบประสิทธิภาพของ Ruby
การอ่านค่าเฉลี่ยโหลด
เนื่องจากเป็นค่าเฉลี่ยของจำนวนกระบวนการทั้งหมด จึงอาจดูเหมือนเป็นการยากที่จะกำหนดว่าค่าเฉลี่ยโหลดที่เหมาะสมคืออะไร และเมื่อใดควรตื่นตระหนก โดยทั่วไป เนื่องจากคอร์ CPU แต่ละคอร์ของคุณสามารถจัดการได้ครั้งละหนึ่งกระบวนการ ระบบจะไม่โอเวอร์โหลดจนกว่าจะเกิน 1.0 ต่อตัวประมวลผลเชิงตรรกะ ในระบบดูอัลคอร์ (ไม่มีไฮเปอร์เธรดดิ้ง) น่าจะเป็น 2.0
โดยปกติ เป็นเรื่องปกติหากค่าเฉลี่ยโหลดสูงกว่า 1.0 ต่อคอร์ในนาทีสุดท้าย แต่โหลดที่เพิ่มขึ้นในค่าเฉลี่ย 5 หรือ 15 นาทีอาจบ่งบอกถึงปัญหา
เคล็ดลับ :การตรวจจับความผิดปกติของ AppSignal สามารถใช้เปิดการแจ้งเตือนเมื่อค่าเฉลี่ยโหลดของคุณสูงกว่าค่าที่กำหนดในช่วงระยะเวลาหนึ่ง เมื่อใช้การตั้งค่าการวอร์มอัพ เราจะส่งข้อความถึงคุณเมื่อคุณโหลดเกิน 1.5 เป็นเวลาสิบห้านาที เป็นต้น
เราได้ตอบคำถามของคุณเกี่ยวกับค่าเฉลี่ยโหลดแล้วหรือยัง หรือมีบางส่วนที่ยังไม่ชัดเจนหรือไม่ โปรดอย่าลังเลที่จะแจ้งให้เราทราบที่ @AppSignal แน่นอน เราอยากทราบว่าคุณชอบบทความนี้อย่างไร หรือหากคุณมีหัวข้ออื่นที่ต้องการทราบข้อมูลเพิ่มเติม