คู่มือเกมแลค › L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์
ข้อความสะสมในคิว Mailbox / job queue backlog
ID สาเหตุ sp-queue · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
ถ้าคำขอเข้ามาเร็วกว่าความเร็วในการประมวลผลจนกองในคิว คำขอที่อยู่ท้ายคิวจะถูกประมวลผลอีกหลายวินาทีต่อมาหรือถูกทิ้ง
ทำไม คำขอมาถึงเร็วกว่าความเร็วในการประมวลผล → ผลคือ คิวยาวขึ้น และถ้าเกินขีดจำกัดก็ทิ้ง → บนหน้าจอ สกิลและเทรดตอบสนองช้า หรือกดไม่ติด
- อาการ
- อินพุตดีเลย์, กดไม่ติด/โรลแบ็ค
- ปัจจัย
- ความหน่วง, แพ็กเก็ตหาย
- ใครเจอ
- บางจุด/บางแชนแนล, เฉพาะบางฟีเจอร์
- เกิดเมื่อไร
- ตอนคนแห่มารวมกัน
- ผู้รับผิดชอบ
- ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
- งานฝั่งทีมพัฒนาเกม
- มอนิเตอร์ความยาวคิว, ใช้นโยบายทิ้งคำขอเก่าก่อน, ประมวลผลแบบขนาน
- บนกราฟ
- ชนเพดานแล้วแบนราบ · ความยาวคิวและอายุของข้อความที่เก่าที่สุด, จำนวนที่ประมวลผลต่อวินาที
- จุดที่ต้องดู
- ความยาวของแต่ละคิว อายุของข้อความที่เก่าที่สุด และจำนวนที่เข้ามา ประมวลผล และทิ้งต่อวินาทีที่เซิร์ฟเวอร์บันทึก ถ้าไม่มีเมตริกจากโค้ด ให้ดู Recv-Q ของซ็อกเก็ตเกมด้วย ss (หรือ netstat) ซึ่งคือปริมาณที่เคอร์เนลรับไว้แล้วแต่โปรเซสยังไม่ได้อ่าน
- สัญญาณว่าใช่
- ระหว่างที่จำนวนที่เข้ามามากกว่าจำนวนที่ประมวลผล จำนวนที่ประมวลผลติดอยู่ที่ค่าหนึ่งไม่ขึ้นอีก และความยาวคิว อายุข้อความ และจำนวนที่ทิ้งเพิ่มขึ้นเรื่อย ๆ
- สัญญาณว่าไม่ใช่
- คิวสั้นและข้อความยังใหม่ แต่ตอบสนองช้า: น่าจะเป็นความหน่วงของเน็ตหรือตัวทิกเองที่ช้า
- วิธีตรวจ
- ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม
- กรณีจริง
- CCP Games 2014: เซิร์ฟเวอร์ EVE Online โหลดเกินในศึกกองยานขนาดใหญ่ที่ HED-GP
แหล่งอ้างอิง
- Avoiding insurmountable queue backlogs AWS
Amazon Builders' Library มอนิเตอร์ backlog ด้วยอายุของข้อความที่รออยู่, ระบบเรียลไทม์ประมวลผลข้อมูลใหม่ก่อน (ใกล้เคียง LIFO), บางครั้งทิ้งข้อความเก่า - Site Reliability Engineering, Chapter 22: Addressing Cascading Failures Google
ถ้าคำขอเข้ามาเร็วกว่าความเร็วในการประมวลผล คิวจะเต็มและความหน่วงเพิ่ม, ใช้ LIFO หรือ CoDel แทน FIFO เพื่อลดคำขอเก่าที่ไม่มีประโยชน์แล้วออก - ss(8) — Linux manual page iproute2
เครื่องมือแสดงสถิติซ็อกเก็ต (ข้อมูลคล้าย netstat), -p แสดงโปรเซสที่ใช้ซ็อกเก็ต - netstat(8) — Linux manual page net-tools
Recv-Q: จำนวนไบต์ในซ็อกเก็ตที่เชื่อมต่อแล้วที่โปรแกรมของผู้ใช้ยังไม่ได้ดึงไป
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (อินพุตดีเลย์)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง