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
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
systemd.service(5) — Linux manual pagesystemd 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=
Liveness, Readiness, and Startup ProbesKubernetes 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
pidstat(1) — Linux manual pagesysstat -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.)
perf-top(1) — Linux manual pageperf 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