한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์

ลูปไม่รู้จบ/ลอจิกทำงานไม่หยุด Infinite loop / runaway logic

ID สาเหตุ sp-infinite-loop · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

ถ้าบั๊กทำให้ทิกหนึ่งไม่จบ เซิร์ฟเวอร์จะหยุด และ watchdog จะบังคับรีสตาร์ต

ทำไม ลูปไม่จบเพราะเงื่อนไขผิด หรือ recursion ไม่หยุด → ผลคือ ทิกไม่จบ เซิร์ฟเวอร์จึงหยุด → บนหน้าจอ ค้างแล้วทุกคนก็หลุด

อาการ
ค้าง, หลุด
ปัจจัย
การหยุดชะงัก
ใครเจอ
บางจุด/บางแชนแนล, ทั้งเซิร์ฟเวอร์
เกิดเมื่อไร
ตอนทำแอ็กชันบางอย่าง, สุ่มเป็นครั้งคราว
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
จำกัดจำนวนรอบของลูป, มี watchdog, เขียนเทสต์ที่จำลองอินพุตที่ก่อปัญหา
บนกราฟ
การเชื่อมต่อหลุดพร้อมกัน · จำนวนการเชื่อมต่อ, CPU แยกตามเธรด
จุดที่ต้องดู
CPU แยกตามเธรดจาก pidstat -t 1 ระหว่างที่หยุด และดูว่าเธรดที่วิ่งอยู่ที่ 100% วนอยู่ในฟังก์ชันไหนด้วย perf top -t (thread ID) หรือ gdb ถ้ารีสตาร์ตไปแล้ว ให้ดูบันทึก watchdog หมดเวลา (WatchdogSec ของ systemd, liveness probe ของ Kubernetes ล้มเหลว)
สัญญาณว่าใช่
ระหว่างที่เซิร์ฟเวอร์หยุด เธรดเกมตัวหนึ่งติดอยู่ที่ CPU 100% และ stack วนอยู่ในฟังก์ชันหรือลูปเดิม
สัญญาณว่าไม่ใช่
CPU ใกล้ 0 ระหว่างที่หยุด: น่าจะเป็นเดดล็อกหรือการรอการตอบกลับจากภายนอก
วิธีตรวจ
ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)

แหล่งอ้างอิง

  1. systemd.service(5) — Linux manual page systemd
    WatchdogSec=: ถ้าเซอร์วิสไม่ส่งสัญญาณว่ายังทำงานอยู่ (WATCHDOG=1) ภายในเวลาที่กำหนด จะถือว่าล้มเหลวและหยุดการทำงาน แล้วรีสตาร์ตอัตโนมัติตามค่า Restart=
  2. Liveness, Readiness, and Startup Probes Kubernetes
    liveness probe จับสถานะที่แอปยังรันอยู่แต่ทำงานต่อไม่ได้แล้วรีสตาร์ต, ค่าเริ่มต้นตรวจทุก 10 วินาที และรีสตาร์ตเมื่อล้มเหลวติดกัน 3 ครั้ง
  3. pidstat(1) — Linux manual page sysstat
    -t แสดงสถิติแยกตามเธรดของโปรเซส (อัตราการใช้ CPU เป็นต้น) ไปด้วย
  4. perf-top(1) — Linux manual page perf
    แสดงสัดส่วนการใช้ CPU ของเธรด (-t) หรือโปรเซส (-p) ที่กำลังรันแยกตามฟังก์ชัน (symbol) แบบเรียลไทม์

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L9 โปรเซสเกมฝั่งเซิร์ฟเวอร์

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (ค้าง)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง