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

Sách trắng lag game › L9 Tiến trình game phía server

Vòng lặp vô hạn và logic chạy mất kiểm soát Infinite loop / runaway logic

ID nguyên nhân sp-infinite-loop · Phụ trách chính Phát triển server (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Khi một bug khiến tick không bao giờ kết thúc, server bị treo và watchdog buộc khởi động lại.

Vì sao Vòng lặp không kết thúc vì điều kiện sai, hoặc đệ quy mất kiểm soát → Dẫn đến Tick không kết thúc nên server bị treo → Trên màn hình Đứng hình rồi mọi người đều mất kết nối

Triệu chứng
Đứng hình, Mất kết nối
Yếu tố
Ngưng trệ
Ai gặp phải
Một địa điểm hoặc kênh, Cả server
Khi nào
Khi làm một thao tác nhất định, Thỉnh thoảng bất chợt
Phụ trách
Phụ trách chính Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Giới hạn số vòng lặp, watchdog, test tái hiện input gây lỗi.
Trên đồ thị
Rớt kết nối hàng loạt · Số kết nối, CPU theo từng thread
Chỗ cần xem
CPU theo từng thread qua pidstat -t 1 trong lúc treo, và thread đang chạy 100% quay ở hàm nào, xem bằng perf top -t (ID thread) hoặc gdb. Nếu đã khởi động lại rồi, xem bản ghi watchdog quá thời gian (WatchdogSec của systemd, liveness probe của Kubernetes thất bại)
Đúng nếu
trong lúc server bị treo, một game thread dính ở 100% CPU và stack cứ quay mãi trong cùng một hàm hoặc vòng lặp
Loại trừ nếu
trong lúc treo CPU gần 0 → deadlock hoặc đang chờ phản hồi bên ngoài
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)

Nguồn

  1. systemd.service(5) — Linux manual page systemd
    WatchdogSec=: nếu service không gửi tín hiệu còn sống (WATCHDOG=1) trong thời gian quy định thì bị coi là lỗi và bị dừng, rồi tự khởi động lại tùy cấu hình Restart=
  2. Liveness, Readiness, and Startup Probes Kubernetes
    Liveness probe phát hiện trạng thái vẫn chạy nhưng không tiến triển được và khởi động lại; mặc định kiểm tra 10 giây một lần, thất bại 3 lần liên tiếp thì khởi động lại
  3. pidstat(1) — Linux manual page sysstat
    -t hiển thị kèm thống kê theo từng thread thuộc tiến trình (mức sử dụng CPU, v.v.)
  4. perf-top(1) — Linux manual page perf
    Hiển thị theo thời gian thực tỷ trọng CPU theo từng hàm (symbol) của thread (-t) hoặc tiến trình (-p) đang chạy

Nguyên nhân nên xem cùng

Cùng tầng: L9 Tiến trình game phía server

Nguyên nhân ở tầng khác gây cùng triệu chứng (Đứng hình)

Xem thẻ gốc có hình minh họa và thí nghiệm