Sách trắng lag game › Tra theo triệu chứng
Mất kết nối: 51 nguyên nhân và đội phụ trách
Tên gọi khác: văng game, rớt mạng, “Đã mất kết nối với máy chủ”
Mở từ điển triệu chứng gốc có hình minh họa →
Đang chơi thì kết nối bị ngắt, game quay về màn hình đăng nhập hoặc cửa sổ kết nối lại.
Đứng hình vài giây rồi hiện thông báo “Đã mất kết nối”. Nếu nhiều người cùng bị ngắt một lúc thì đó là vấn đề phía server.
Trong suốt thời gian timeout không có gói tin nào. Hãy xem đường truyền đứt lâu, idle timeout, server crash hoặc khởi động lại, server hay PC của bạn đứng lâu hơn timeout (loading lâu). Nếu game tự tắt mà không có thông báo thì hãy xem việc client bị buộc thoát (crash, thiếu bộ nhớ) trước khi xem kết nối.
Nguyên nhân gây ra triệu chứng này
L1 Tiến trình game phía client
- Rò rỉ bộ nhớ phía client: Game bật càng lâu thì bộ nhớ dùng càng tăng, game chậm dần rồi cuối cùng bị tắt cưỡng bức. (Phát triển client (Đội phát triển game))
- Client bị crash: Game tắt vì một lỗi không được xử lý. Người chơi thấy giống mất kết nối, nhưng server vẫn bình thường. (Phát triển client (Đội phát triển game))
- Kiểm tra của module bảo mật game (anti-cheat): Module bảo mật chạy cùng game để chống hack sẽ kiểm tra định kỳ. Nếu lần kiểm tra nặng, hoặc heartbeat (tín hiệu định kỳ báo vẫn còn sống) trao đổi với server bảo mật bị trễ, game sẽ giật khựng hoặc mất kết nối. (Phát triển client (Đội phát triển game))
L2 OS và thiết bị phía client
- Ứng dụng di động chuyển xuống chạy nền: Khi bạn tạm chuyển ra khỏi game để xem thông báo, vài giây sau OS tạm dừng (suspend) ứng dụng, và trong lúc đó server ngắt kết nối của bạn. (Phát triển client (Đội phát triển game))
- Chuyển đổi Wi-Fi ↔ LTE hoặc 5G: Khi bạn ra khỏi nhà, Wi-Fi mất và máy chuyển sang LTE hoặc 5G, địa chỉ IP của bạn thay đổi nên kết nối hiện có không còn dùng được. (Phát triển server (Đội phát triển game))
- Giới hạn xử lý khi cửa sổ bị thu nhỏ hoặc mất focus: Khi bạn chuyển sang cửa sổ khác hoặc thu nhỏ game, cả game lẫn Windows đều cho game chạy chậm lại để tiết kiệm điện. Lúc quay lại, gói tin tồn đọng dồn tới một lượt, hoặc kết nối đã bị ngắt. (Phát triển client (Đội phát triển game))
- Phần mềm overlay can thiệp vào game: Phần mềm nhắn tin, launcher, quay màn hình, hiển thị FPS chen vào quá trình render của game (hooking) để vẽ UI của chúng đè lên màn hình game. Mỗi khung hình phải làm thêm việc, và đôi khi xung đột với game gây khựng hoặc làm game bị tắt đột ngột. (Bên ngoài (Bên ngoài))
L3 Mạng gia đình
- Ánh xạ NAT hết hạn: Router xóa khỏi bảng NAT các kết nối nhàn rỗi không có gói tin qua lại trong một thời gian. Đây là nguyên nhân phổ biến khiến người chơi đứng yên một lúc, vừa di chuyển là mất kết nối. (Phát triển client (Đội phát triển game))
- Router yếu hoặc quá nhiệt: Khi một router giá rẻ phải gánh hàng chục thiết bị và hàng nghìn kết nối, bản thân router không xử lý nổi. (Bên ngoài (Bên ngoài))
- Handover trạm phát sóng (khi đang di chuyển): Khi di chuyển bằng xe buýt hay tàu điện ngầm, kết nối bị gián đoạn trong lúc máy đổi trạm phát sóng. (Bên ngoài (Bên ngoài))
- Sóng di động yếu hoặc vùng lõm sóng: Trong thang máy, tầng hầm hay sâu bên trong tòa nhà, số lần truyền lại tăng, tốc độ giảm và cuối cùng mất kết nối. (Bên ngoài (Bên ngoài))
L4 Đường truyền Internet
- Hạn chế UDP và kiểm tra gói tin ở cấp quốc gia hoặc nhà mạng: Một số mạng chặn một số địa chỉ và cổng UDP nhất định hoặc giới hạn tốc độ UDP, còn thiết bị kiểm tra gói tin thì lọc bỏ các giao thức mà nó không nhận ra. Game giao tiếp bằng UDP sẽ không kết nối được hoặc hay bị mất kết nối trên các mạng đó. (Bên ngoài (Bên ngoài))
- Chất lượng đường truyền kém: Đầu nối tiếp xúc kém, dây cũ hoặc modem trục trặc gây mất gói đều đặn và làm đường truyền bị ngắt theo chu kỳ. (Bên ngoài (Bên ngoài))
- Đường truyền dùng chung bị DDoS làm bão hòa: Các cuộc tấn công quy mô lớn nhắm vào công ty game, hoặc vào nơi khác trong cùng mạng, làm đầy đường truyền dùng chung. (Hạ tầng mạng (Đội hạ tầng))
- IP dùng chung của nhà mạng (CGNAT): Mạng di động và một số nhà mạng cho nhiều thuê bao dùng chung một IP, và xóa ánh xạ (mapping) của kết nối nhàn rỗi sau một thời gian ngắn. (Phát triển client (Đội phát triển game))
L5 Thiết bị mạng trung tâm dữ liệu
- Bảng phiên của tường lửa bị đầy: Tường lửa ghi mọi kết nối đã cho đi qua vào bảng phiên để theo dõi. Khi bảng đầy, tường lửa không nhận thêm được kết nối mới. (Hạ tầng mạng (Đội hạ tầng))
- Idle timeout của bộ cân bằng tải: Bộ cân bằng tải xóa kết nối nhàn rỗi sau một khoảng thời gian nhất định. Game vẫn coi là kết nối còn đó cho đến lúc bị mất kết nối. (Hạ tầng mạng (Đội hạ tầng))
- Hết hạn theo dõi kết nối của security group trên cloud: Tường lửa gắn với server cloud (security group) cũng theo dõi kết nối, và mục theo dõi của kết nối nhàn rỗi sẽ hết hạn sau một khoảng thời gian định sẵn. Ngay cả với server nhận kết nối trực tiếp không qua bộ cân bằng tải, người chơi để yên một lúc cũng có thể bị mất kết nối. (Hạ tầng server (Đội hạ tầng))
- Failover thiết bị mạng: Khi một router hay tường lửa hỏng và chuyển sang thiết bị dự phòng (failover), mọi người đều bị đứng hình trong vài giây chuyển đổi đó. (Hạ tầng mạng (Đội hạ tầng))
- MTU không khớp (chỉ mất gói lớn): Khi MTU (kích thước gửi được trong một lần) của một chặng ở giữa nhỏ đi mà thông báo vượt kích thước lại bị chặn, chỉ các gói lớn liên tục bị mất. (Hạ tầng mạng (Đội hạ tầng))
L6 Card mạng server
- Bảo trì host cloud và live migration: Khi nhà cung cấp cloud bảo trì server vật lý (host), họ chuyển máy ảo sang host khác (live migration) hoặc tạm dừng máy ảo một lúc. Trong lúc đó cả server bị đứng, nếu thời gian dừng dài thì kết nối bị ngắt. (Hạ tầng server (Đội hạ tầng))
- Lỗi driver hoặc firmware NIC: Do lỗi driver hoặc tính năng hoạt động sai, card mạng bị treo và khởi động lại, trong lúc đó mọi việc gửi nhận đều bị ngắt. (Hạ tầng server (Đội hạ tầng))
L7 OS server (kernel)
- OOM killer: Khi bộ nhớ cạn, Linux chọn tiến trình dùng nhiều bộ nhớ nhất và buộc kết thúc (kill) nó. Thường đó là server game. (Phát triển server (Đội phát triển game))
- Đồng hồ hệ thống nhảy (NTP step): Khi đồng hồ server bị chỉnh tới hoặc lùi vài giây trong một lần, các timer dựa vào đồng hồ hệ thống sẽ kích hoạt dồn một lượt hoặc dừng hẳn. (Phát triển server (Đội phát triển game))
L8 Socket và giao thức
- TCP RTO và exponential backoff: Mỗi lần truyền lại tiếp tục thất bại, thời gian chờ lại tăng gấp đôi, nên đường truyền chỉ đứt chốc lát cũng thành một lần đứng dài. (Phát triển server (Đội phát triển game))
- Chính sách xử lý client chậm (slow consumer): Với client mà dữ liệu cần gửi cứ dồn lên mãi, server bỏ bớt các bản cập nhật cũ hoặc ngắt kết nối. (Phát triển server (Đội phát triển game))
- Mất dữ liệu cuối do đóng cưỡng bức bằng RST: Khi server cắt kết nối đột ngột, thông báo cuối cùng hoặc tín hiệu đã lưu xong mà server vừa gửi sẽ bị mất. (Phát triển server (Đội phát triển game))
- SO_REUSEPORT phân phối bị lệch: Khi nhiều tiến trình cùng nhận trên một cổng, kernel dùng hash địa chỉ để gán mỗi kết nối cho một tiến trình và không đổi lại. Nếu một tiến trình bị dừng, chỉ những người được gán vào đó phải chờ. (Phát triển server (Đội phát triển game))
- Lỗi WSAECONNRESET trên socket UDP của Windows: Khi server Windows gửi UDP tới một client đã rời đi, thông báo “không tới được cổng” (ICMP) sẽ gửi về. Thông báo này khiến lời gọi nhận tiếp theo kết thúc bằng lỗi; nếu code server coi lỗi đó là bản thân socket bị hỏng, mọi người dùng socket đó đều bị ảnh hưởng. (Phát triển server (Đội phát triển game))
L9 Tiến trình game phía server
- Deadlock: Khi hai thread chờ lock mà bên kia đang giữ, cả hai sẽ đứng mãi mãi. (Phát triển server (Đội phát triển game))
- Server crash: Khi tiến trình server chết vì một lỗi không được xử lý, mọi người trên server đó mất kết nối cùng lúc. (Phát triển server (Đội phát triển game))
- Vòng lặp vô hạn và logic chạy mất kiểm soát: 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. (Phát triển server (Đội phát triển game))
L10 Bộ nhớ
- Rò rỉ bộ nhớ: Bộ nhớ không được giải phóng tích tụ dần, vài ngày sau dẫn tới GC chạy dồn dập, swap hoặc tiến trình bị buộc kết thúc. (Phát triển server (Đội phát triển game))
- GC thrashing (heap còn ít chỗ trống): Khi dữ liệu còn sống gần chạm giới hạn heap, GC chạy xong cũng gần như không thu hồi được gì, nên GC cứ lặp lại không ngừng. (Phát triển server (Đội phát triển game))
- Phân mảnh bộ nhớ: Cấp phát và giải phóng lặp đi lặp lại làm vùng trống bị chia vụn, khiến tiến trình chiếm nhiều bộ nhớ hơn hẳn lượng thực sự dùng. (Phát triển server (Đội phát triển game))
L11 Ổ đĩa
- Ổ đĩa đầy: Khi log và dump tích tụ làm ổ đĩa đầy, thao tác ghi thất bại, và nếu không có phương án dự phòng thì server sập. (Hạ tầng server (Đội hạ tầng))
L12 Cơ sở dữ liệu
- Failover DB: Trong lúc DB chính chết và chuyển sang DB dự phòng, không ghi được dữ liệu, và phần dữ liệu cuối cùng chưa kịp replicate có thể bị mất. (Hạ tầng DB (Đội hạ tầng))
L13 Kiến trúc và vận hành server
- Đi qua gateway hoặc proxy: Khi đặt một server trung gian giữa client và server game, mỗi lần đi qua nó lại cộng thêm thời gian xử lý, và server đó trở thành điểm lỗi duy nhất (single point of failure). (Phát triển server (Đội phát triển game))
- Chuyển zone (chuyển giao giữa các server): Khi nhân vật vào bản đồ hoặc phó bản khác, thông tin nhân vật phải được chuyển sang server khác, và quá trình này có thể bị chậm hoặc thất bại. (Phát triển server (Đội phát triển game))
- Triển khai và khởi động lại: Khi khởi động lại server để cập nhật mà không chuyển kết nối đi nơi khác, những người đang ở server đó bị mất kết nối, đồng thời việc lưu dữ liệu ngay trước khi tắt và việc kết nối lại dồn vào cùng một lúc. (Phát triển server (Đội phát triển game))
- Giới hạn hàng chờ đăng nhập, thiếu thời gian giữ chỗ khi kết nối lại: Ngay sau khi ra mắt hoặc bảo trì, lượng kết nối dồn đến khiến hàng chờ đăng nhập chạm giới hạn và từ chối lượt chờ mới, còn người chơi đang chờ chỉ cần mất kết nối trong giây lát là mất chỗ và phải quay về cuối hàng. (Phát triển server (Đội phát triển game))
Thiết kế đồng bộ
- Cấu trúc host (chủ phòng): Nếu PC của một người chơi đóng vai server, đường truyền và hiệu năng PC của người đó quyết định cảm nhận của tất cả mọi người. (Phát triển server (Đội phát triển game))
Sự cố chỉ một số người gặp
- Báo nhầm khi kiểm tra, dồn vào người chơi dùng một nhà mạng: Người chơi dùng đường truyền có jitter lớn có input tới dồn cục, nên hay bị vướng các bước kiểm tra tốc độ và hồi chiêu của server. (Phát triển server (Đội phát triển game))
- Xung đột cổng UDP cố định: Nếu client được viết để dùng một cổng cục bộ cố định, client thứ hai trên cùng PC sẽ không dùng được cổng đó hoặc phải chia gói tin nhận được với client thứ nhất. (Phát triển client (Đội phát triển game))
- Lỗi phân biệt phiên theo IP hoặc thiết bị: Nếu server hoặc server trung gian phân biệt kết nối bằng IP hay ID thiết bị, hai client trên cùng một PC (cùng IP công cộng) sẽ bị coi là một người. (Phát triển server (Đội phát triển game))
- Giới hạn chạy nhiều client: Nếu module bảo mật hoặc chính sách server giới hạn nhiều client trên một PC, client thứ hai sẽ bị chặn chạy hoặc chặn kết nối, hoặc client bật trước bị mất kết nối. Một số game chỉ chặn tính năng của client chạy thêm. (Phát triển client (Đội phát triển game))
- Giới hạn xử lý ở cửa sổ chạy nền: Với client ở cửa sổ chạy nền, game, engine và OS đều giảm khung hình và việc xử lý. Gói tin nhận được không được xử lý kịp nên bị dồn lại hoặc tràn. (Phát triển client (Đội phát triển game))
Nguyên nhân gốc của truyền lại TCP
- Tường lửa và theo dõi kết nối bỏ gói: Tường lửa hoặc tính năng theo dõi kết nối của Linux (conntrack, ghi các kết nối đi qua vào một bảng) sẽ bỏ gói tin khi bảng đầy hoặc khi xác định trạng thái kết nối không khớp. (Hạ tầng mạng (Đội hạ tầng))
- Thiết bị trung gian vượt giới hạn xử lý (tường lửa, IPS, chống DDoS): Tường lửa, thiết bị chống xâm nhập (IPS) và thiết bị chống DDoS kiểm tra từng gói tin đi qua. Từ lúc vượt năng lực kiểm tra, thiết bị bỏ những gói không xử lý kịp. (Hạ tầng mạng (Đội hạ tầng))
- MTU black hole (chỉ gói lớn liên tục bị mất): Khi kích thước tối đa mà một chặng giữa đường nhận được bị giảm đi nhưng thông báo “quá lớn” (ICMP) lại bị chặn, gói lớn gửi lại bao nhiêu lần cũng tiếp tục biến mất. (Hạ tầng mạng (Đội hạ tầng))
- Ánh xạ NAT hoặc bộ cân bằng tải hết hạn giữa chừng kết nối: Nếu thiết bị trung gian xóa ánh xạ (mapping: mục ghi lại kết nối này cần được chuyển tới đâu) của một kết nối nhàn rỗi, gói gửi tiếp theo sẽ không được chuyển đi. Bên gửi chỉ truyền lại liên tục rồi mất kết nối, hoặc thiết bị gửi trả gói từ chối kết nối (RST) khiến kết nối đứt ngay. (Phát triển client (Đội phát triển game))
Xem từ điển triệu chứng gốc có hình minh họa