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

ทำความเข้าใจกับโหลดระบบและค่าเฉลี่ยโหลด

เครื่องมือเช่น 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 แน่นอน เราอยากทราบว่าคุณชอบบทความนี้อย่างไร หรือหากคุณมีหัวข้ออื่นที่ต้องการทราบข้อมูลเพิ่มเติม