คู่มือเกมแลค › ค้นหาตามอาการ
สโลว์โมชั่น: 24 สาเหตุและทีมที่ต้องแก้
เรียกอีกอย่างว่า: ทั้งโลกในเกมช้าลง, อืดไปหมด
เปิดพจนานุกรมอาการในฉบับหลักที่มีภาพ →
ทุกอย่างเคลื่อนที่ช้าลง การร่ายสกิลและการเดินของมอนสเตอร์ดูยืดยาด ขึ้นกับการออกแบบเซิร์ฟเวอร์ บางเกมความเร็วยังเท่าเดิม และไปแสดงเป็นอาการกระตุกหรือวาร์ปแทน
ทุกคนในพื้นที่เดียวกันช้าลงพร้อมกัน มักเกิดในจุดที่คนรวมตัวกันเยอะ
เซิร์ฟเวอร์ประมวลผลทิกไม่ทันเวลา เน็ตยังปกติ ปิงที่วัดจากนอกเกมจึงเท่าเดิม ส่วนปิงในเกมอาจสูงขึ้นเล็กน้อยถ้ารวมเวลารอประมวลผลของเซิร์ฟเวอร์ไว้ด้วย ให้ดูจำนวนคนที่พุ่งขึ้น, การคำนวณระยะมองเห็น, broadcast และหน่วยความจำไม่พอ
สาเหตุที่ทำให้เกิดอาการนี้
L1 โปรเซสเกมฝั่งไคลเอนต์
L5 อุปกรณ์เครือข่ายในดาต้าเซ็นเตอร์
L7 OS ของเซิร์ฟเวอร์ (เคอร์เนล)
L8 ซ็อกเก็ตและโปรโตคอล
- การส่งแบบ blocking เพราะไคลเอนต์ช้า: ถ้า send buffer ของผู้เล่นคนหนึ่งที่เน็ตช้าเต็ม แล้วเซิร์ฟเวอร์ส่งแบบ blocking (การส่งที่ฟังก์ชันจะไม่คืนค่าจนกว่าบัฟเฟอร์จะมีที่ว่าง) เธรดของเซิร์ฟเวอร์จะต้องรอผู้เล่นคนนั้นคนเดียว (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- โครงสร้างแบบ blocking I/O: โครงสร้างที่เธรดทำอย่างอื่นไม่ได้ระหว่างรอซ็อกเก็ตตัวเดียว จะทำให้ทั้งระบบช้าลงเมื่อคนเพิ่มขึ้น (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์
- ทิกเกินงบเวลา: ถ้างานในหนึ่งทิกเกินงบเวลา รอบทิกของเซิร์ฟเวอร์จะยืดออก และทั้งพื้นที่จะช้าลงหรือกระตุก (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- การคำนวณระยะมองเห็น (AOI) พุ่ง (N²): ถ้าเปรียบเทียบทุกคนกับทุกคนเพื่อหาว่าใครมองเห็นใคร เมื่อจำนวนคนเพิ่มเป็น 10 เท่า การคำนวณจะเพิ่มเป็น 100 เท่า (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- พื้นที่ที่รันบนเธรดเดียวโหลดเกิน (hotspot): ในโครงสร้างที่แต่ละพื้นที่มีเธรดดูแลตัวเดียว ถ้าคนแห่ไปที่จุดเดียว คอร์ตัวนั้นตัวเดียวจะขึ้นไป 100% (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- การคำนวณ pathfinding พุ่ง: ถ้ามอนสเตอร์หลายร้อยตัวไล่ตามผู้เล่นและคำนวณเส้นทางพร้อมกัน จะกิน CPU มาก (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- การต่อสู้ที่รุมเป้าหมายเดียว (เวิลด์บอส): ถ้าคนหลายร้อยคนตีบอสตัวเดียวพร้อมกัน การคำนวณของบอสตัวนั้นจะกระจุกที่จุดเดียว และข้อมูลการโจมตีจะถูกส่งให้ทุกคนที่มองเห็น (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- เอนทิตีสะสม (ไอเทม/ซัมมอนที่ไม่ถูกเก็บกวาด): ถ้าไอเทมที่ตกบนพื้นซึ่งควรหายไปแล้ว ซัมมอน และตัวจับเวลาที่จบแล้วไม่ถูกเก็บกวาดจนกองสะสม ยิ่งเปิดเซิร์ฟเวอร์ไว้นาน งานในแต่ละทิกก็ยิ่งเพิ่ม (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
L10 หน่วยความจำ
- หน่วยความจำรั่ว: หน่วยความจำที่ไม่ถูกคืนค่อย ๆ สะสม จนหลายวันต่อมานำไปสู่ GC ทำงานไม่หยุด, สวอป หรือโปรเซสถูกบังคับปิด (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- GC thrashing (heap เหลือที่ว่างไม่พอ): เมื่อข้อมูลที่ยังใช้อยู่ (live data) เข้าใกล้ขีดจำกัดของ heap แม้ GC ทำงานก็แทบไม่มีอะไรให้เก็บคืน GC จึงวนทำงานซ้ำไม่หยุด (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- สวอป: ถ้าหน่วยความจำไม่พอจน OS ย้ายบางส่วนไปไว้บนดิสก์ ทุกครั้งที่ใช้หน่วยความจำส่วนนั้นต้องรอดิสก์ที่ช้ากว่าเกิน 1,000 เท่า (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- แคชมิส: ถ้าข้อมูลกระจัดกระจายอยู่ทั่วหน่วยความจำ CPU ต้องไปรอถึง RAM ที่ช้าทุกครั้ง (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- หน่วยความจำแตกกระจาย (fragmentation): ถ้าจัดสรรและคืนหน่วยความจำซ้ำไปมาจนพื้นที่ว่างแตกเป็นชิ้นเล็ก ๆ โปรเซสจะถือครองหน่วยความจำมากกว่าที่ใช้จริงมาก (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
- หน่วยความจำ NUMA ฝั่งไกล (remote): บนเซิร์ฟเวอร์ที่มี CPU สองตัว ถ้าใช้หน่วยความจำที่ต่ออยู่กับ CPU อีกฝั่ง การเข้าถึงจะช้าลง (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
L11 ดิสก์
- burst credit ของดิสก์คลาวด์หมด: ดิสก์คลาวด์บางประเภทและเซิร์ฟเวอร์สเปกเล็กมี burst credit ที่ให้ทำงานเร็วกว่าประสิทธิภาพพื้นฐานได้ชั่วคราว ถ้าช่วงที่ยุ่งยาวนานจนเครดิตหมด ความเร็วจะตกลงกะทันหัน (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
L13 สถาปัตยกรรมเซิร์ฟเวอร์และการดูแลระบบ
- autoscaling เพิ่มเครื่องไม่ทัน: เมื่อคนแห่เข้ามา ระบบจะเพิ่มเซิร์ฟเวอร์อัตโนมัติ แต่ต้องใช้เวลาเตรียมหลายนาที และระหว่างนั้นเซิร์ฟเวอร์เดิมรับโหลดเกิน (อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา))
- มาโครและบอทมากเกินไป: บอทส่งคำขอถี่กว่าคนมาก จึงกินกำลังประมวลผลของเซิร์ฟเวอร์ (พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม))
ดูพจนานุกรมอาการในฉบับหลักที่มีภาพ