遊戲 Lag 白皮書 › 依症狀查找
斷線:51 個原因與負責團隊
其他說法:被踢出遊戲、連線中斷、與伺服器的連線已中斷
在含圖解的完整版症狀辭典中開啟 →
遊戲中連線中斷,被送回登入畫面或重新連線視窗。
定格持續幾秒後跳出「連線已中斷」提示。很多人同時斷線的話,就是伺服器端的問題。
在逾時時間內一個封包都沒收到。要查線路長時間中斷、閒置逾時、伺服器當機或重啟,以及停住時間超過逾時的伺服器或自己的電腦(載入太久)。若沒有任何提示、遊戲直接關掉,先查用戶端被強制結束(閃退、記憶體不足),再查連線。
造成這個症狀的原因
L1 用戶端遊戲程式
- 用戶端記憶體洩漏: 開得越久,記憶體用量越大,遊戲越來越慢,最後被強制關閉。 (遊戲開發團隊(用戶端開發))
- 用戶端閃退: 遊戲因未處理的錯誤而關閉。在玩家看來像斷線,但伺服器是正常的。 (遊戲開發團隊(用戶端開發))
- 遊戲安全模組(反作弊)檢查: 為了防範外掛而與遊戲一起執行的安全模組會定期檢查。檢查太重,或與安全伺服器往來的心跳封包(定期確認連線存活的訊號)延遲時,就會卡頓或斷線。 (遊戲開發團隊(用戶端開發))
L2 用戶端 OS 與裝置
- 手機 App 切到背景: 為了看通知而把 App 暫時切到背景時,OS 會在幾秒後暫停(suspend)App,這段期間伺服器就會切斷玩家的連線。 (遊戲開發團隊(用戶端開發))
- Wi-Fi ↔ LTE/5G 切換: 走出家門時 Wi-Fi 斷掉、改用 LTE/5G,自己的 IP 位址會改變,原本的連線就此失效。 (遊戲開發團隊(伺服器開發))
- 視窗最小化或非作用中時的處理限制: 切到其他視窗或把遊戲最小化時,遊戲與 Windows 會為了省電讓遊戲跑得比較慢。回到遊戲時,累積的封包會一口氣湧入,或者早已斷線。 (遊戲開發團隊(用戶端開發))
- overlay 程式干擾: 通訊軟體、啟動器、錄影、FPS 顯示程式為了在遊戲畫面上疊加自己的 UI,會介入遊戲的渲染流程(hook)。每個畫格的工作量因此增加,偶爾還會與遊戲衝突,造成頓一下或遊戲被強制關閉。 (外部(外部))
L3 家用網路
- NAT mapping 過期: 分享器會把一段時間沒有封包往來的閒置連線從 NAT 表中刪除。這是閒置一段時間後一有動作就斷線的常見原因。 (遊戲開發團隊(用戶端開發))
- 分享器效能不足、過熱: 便宜的分享器同時接了數十台裝置、數千條連線時,分享器本身就處理不過來。 (外部(外部))
- 基地台換手(移動中): 搭公車、捷運移動時,切換基地台的期間通訊會中斷。 (外部(外部))
- 行動網路訊號弱、收訊死角: 在電梯、地下室、建築物深處,重傳會增加、速度下降,最後斷線。 (外部(外部))
L4 網際網路線路
- 國家/電信業者層級的 UDP 限制與封包檢測: 部分網路會封鎖特定 UDP 位址與 port,或限制 UDP 速度;封包檢測設備也會過濾掉無法辨識的協定。用 UDP 通訊的遊戲在這類網路上會連不上或經常斷線。 (外部(外部))
- 線路品質不良: 接頭接觸不良、老舊線路或數據機異常,會造成持續的封包遺失與週期性的線路中斷。 (外部(外部))
- DDoS 造成共用線路飽和: 針對遊戲公司,或同一網路上其他對象的大量攻擊,會塞滿共用的線路。 (基礎設施團隊(網路基礎設施))
- 電信業者共用 IP(CGNAT): 行動網路與部分電信業者讓多位用戶共用一個 IP,並在短時間內清除閒置連線的 NAT mapping。 (遊戲開發團隊(用戶端開發))
L5 資料中心網路設備
- 防火牆 session 表飽和: 防火牆會把放行的每條連線記錄在 session 表中追蹤。表一旦滿了,就無法接受新連線。 (基礎設施團隊(網路基礎設施))
- 負載平衡器閒置逾時: 負載平衡器會在一段時間後清除閒置連線。遊戲還以為連線仍然維持著,結果就斷線了。 (基礎設施團隊(網路基礎設施))
- 雲端安全群組的連線追蹤過期: 雲端伺服器上的防火牆(安全群組)也會追蹤連線,閒置連線的追蹤項目會在一定時間後過期。即使是沒有經過負載平衡器、直接連線的伺服器,靜止不動的玩家也可能斷線。 (基礎設施團隊(伺服器基礎設施))
- 網路設備容錯移轉(failover): 路由器或防火牆有一台故障、切換到備援設備(failover)的幾秒之間,所有人的畫面都會停住。 (基礎設施團隊(網路基礎設施))
- MTU 不一致(只有大封包消失): 中途區段的 MTU(一次能傳送的大小)變小,而大小超過的通知又被擋掉時,只有大封包會一直消失。 (基礎設施團隊(網路基礎設施))
L6 伺服器網路卡
- 雲端主機維護與即時遷移: 雲端供應商維護實體伺服器(主機)時,會把虛擬機器搬到其他主機(即時遷移),或暫時停住。這段期間整台伺服器都會停住,停住的時間一長,連線就會中斷。 (基礎設施團隊(伺服器基礎設施))
- NIC 驅動程式/韌體問題: 驅動程式 bug 或功能異常讓網路卡停住並重新啟動,這段期間所有收發都會中斷。 (基礎設施團隊(伺服器基礎設施))
L7 伺服器 OS(kernel)
- OOM killer: Linux 在記憶體耗盡時,會挑出使用最多記憶體的處理程序強制終止,通常就是遊戲伺服器。 (遊戲開發團隊(伺服器開發))
- 系統時鐘跳動(NTP step): 伺服器時鐘一次被往前或往後調整幾秒時,依賴系統時鐘的計時器會同時觸發或停住。 (遊戲開發團隊(伺服器開發))
L8 Socket 與協定
L9 伺服器遊戲程式
- 死結: 兩個執行緒各自等待對方持有的鎖時,就會永遠停住。 (遊戲開發團隊(伺服器開發))
- 伺服器當機: 伺服器處理程序因未處理的錯誤而終止時,該伺服器上所有人會同時斷線。 (遊戲開發團隊(伺服器開發))
- 無窮迴圈、邏輯失控: 因 bug 導致一個 tick 結束不了時,伺服器就會停住,看門狗會強制重新啟動。 (遊戲開發團隊(伺服器開發))
L10 記憶體
- 記憶體洩漏: 沒有釋放的記憶體一點一點累積,幾天後演變成 GC 暴增、swap 或處理程序被強制終止。 (遊戲開發團隊(伺服器開發))
- GC thrashing(heap 可用空間不足): 存活資料逼近 heap 上限時,每次 GC 幾乎回收不到東西,GC 就會不停反覆執行。 (遊戲開發團隊(伺服器開發))
- 記憶體碎片化: 反覆配置與釋放,讓閒置空間被切得零碎時,占用的記憶體會遠多於實際使用量。 (遊戲開發團隊(伺服器開發))
L11 磁碟
- 磁碟已滿: log 與 dump 越積越多、把磁碟塞滿時,寫入會失敗;沒有防範措施的話,伺服器會當機。 (基礎設施團隊(伺服器基礎設施))
L12 資料庫
- DB 容錯移轉: 主 DB 故障、切換到備援 DB 的期間無法寫入,最後一批還沒複寫過去的資料可能會遺失。 (基礎設施團隊(DB 基礎設施))
L13 伺服器架構與維運
- 經由閘道/proxy: 在用戶端與遊戲伺服器之間放一台中介伺服器時,每經過一次就多一段處理時間,而且這台伺服器會成為單點故障。 (遊戲開發團隊(伺服器開發))
- 切換 zone(跨伺服器轉移): 進入其他地圖或副本時,把角色資料交給另一台伺服器的過程中會產生延遲與失敗。 (遊戲開發團隊(伺服器開發))
- 部署與重新啟動: 為了更新而重新啟動伺服器時,如果不先把連線移走,原本在那台伺服器上的人就會斷線,關閉前的存檔與重新連線也會同時湧入。 (遊戲開發團隊(伺服器開發))
- 登入排隊上限與重新連線寬限不足: 上市或維護剛結束時連線湧入,登入排隊碰到上限就拒絕新的排隊,正在排隊的玩家只要短暫斷線就會失去位置,回到隊伍最後面。 (遊戲開發團隊(伺服器開發))
同步設計
- 主機(房主)架構: 由某個玩家的電腦擔任伺服器時,那個人的線路與電腦效能決定了所有人的體感。 (遊戲開發團隊(伺服器開發))
只有部分人遇到的問題
- 集中在特定電信業者玩家的驗證誤判: 線路抖動大的人,輸入會成批抵達,因此常被伺服器的速度、冷卻檢查攔下。 (遊戲開發團隊(伺服器開發))
- 固定 UDP port 衝突: 用戶端若設計成使用固定的本機 port,同一台電腦的第二個用戶端就無法使用該 port,或與第一個用戶端分食封包。 (遊戲開發團隊(用戶端開發))
- 以 IP/裝置區分 session 的 bug: 伺服器或中介伺服器以 IP 或裝置 ID 區分連線時,會把同一台電腦(同一個公用 IP)的兩個用戶端視為同一個人。 (遊戲開發團隊(伺服器開發))
- 多開限制: 安全模組或伺服器政策限制同一台電腦開多個用戶端時,第二個用戶端會無法執行或連線,或者先開的那一個會斷線。有些遊戲只封鎖額外用戶端的功能。 (遊戲開發團隊(用戶端開發))
- 背景視窗的處理限制: 背景視窗中的用戶端,會被遊戲、引擎、OS 降低畫格數與處理量。收到的封包來不及處理,就會積壓或溢位。 (遊戲開發團隊(用戶端開發))
TCP 重傳的根本原因
- 防火牆與連線追蹤丟棄封包: 防火牆或 Linux 連線追蹤(conntrack,把經過的連線記錄在表中的功能),在表已滿或判斷連線狀態不符時,會丟棄封包。 (基礎設施團隊(網路基礎設施))
- 中間設備超過處理上限(防火牆、IPS、DDoS 防護): 防火牆、入侵防禦設備(IPS)、DDoS 防護設備會逐一檢查經過的封包。從超過檢查能力的那一刻起,處理不了的封包就會被丟棄。 (基礎設施團隊(網路基礎設施))
- MTU 黑洞(只有大封包反覆遺失): 中途區段能接收的大小變小,而「封包太大」的通知(ICMP)又被擋掉時,大封包不管重送幾次都會一直消失。 (基礎設施團隊(網路基礎設施))
- 連線途中 NAT 或負載平衡器的 mapping 過期: 中途設備刪除閒置連線的 mapping(記錄這條連線要轉送到哪裡的項目)後,接下來送出的封包就無法送達。連線會不斷重傳直到斷線,或是設備回傳拒絕連線(RST)而立刻斷線。 (遊戲開發團隊(用戶端開發))
查看含圖解的完整版症狀辭典