遊戲 Lag 白皮書 › 依症狀查找
慢動作:24 個原因與負責團隊
其他說法:整個世界變慢、整體遲鈍
在含圖解的完整版症狀辭典中開啟 →
所有東西都變慢,技能施放和怪物移動看起來像被拉長。依伺服器設計不同,也可能速度不變,改以卡頓或瞬移的形式出現。
同一區域的所有人一起變慢,通常發生在人多聚集的地方。
伺服器無法在時限內跑完 tick。線路本身正常,所以在遊戲外量的 ping 不變;遊戲內的 ping 若含有伺服器處理的等待時間,可能會稍微升高。要查人數暴增、視野計算、廣播、記憶體不足。
造成這個症狀的原因
L1 用戶端遊戲程式
- 固定時間步長追趕失控: 停過一次之後集中補算落後的部分,又因為這些計算而再度落後。 (遊戲開發團隊(用戶端開發))
L5 資料中心網路設備
L7 伺服器 OS(kernel)
- 執行緒過多與 context switch: 執行緒數量遠多於 CPU 核心時,OS 會把 CPU 花在輪流切換執行緒上。 (遊戲開發團隊(伺服器開發))
- 容器 CPU 節流(CFS 配額): 容器設了 CPU 上限時,只要在固定週期(通常是 100ms)內用完配額,剩下的時間就會被強制暫停(節流)。 (基礎設施團隊(伺服器基礎設施))
- 伺服器電源管理(C-state、頻率調整)造成延遲飆高: 閒置的 CPU 核心為了省電,會進入深層省電狀態(C-state)並降低頻率。封包或計時器到來時,喚醒核心並拉高頻率需要時間,處理小封包時就會多出延遲。 (基礎設施團隊(伺服器基礎設施))
- 排程工作: 每天固定時間執行的 log 壓縮、備份、安全掃描會占用 CPU 與磁碟。 (基礎設施團隊(伺服器基礎設施))
- OS、kernel、驅動程式、韌體更新後的效能變化: 遊戲程式碼沒變,但伺服器 OS、kernel、驅動程式、韌體更新後就變慢。更新有時會改變預設值、排程器、CPU 漏洞緩解措施(mitigations)與驅動程式的行為。 (基礎設施團隊(伺服器基礎設施))
L8 Socket 與協定
- 慢速用戶端造成的阻塞式傳送: 線路很慢的某位玩家傳送緩衝區已滿時,若用阻塞方式(緩衝區有空間之前呼叫不會返回的傳送)送出,伺服器執行緒就會一直等那一個人。 (遊戲開發團隊(伺服器開發))
- 阻塞式 I/O 架構: 執行緒在等待某個 socket 時無法做其他事的架構,玩家越多整體就越慢。 (遊戲開發團隊(伺服器開發))
L9 伺服器遊戲程式
- 超出 tick 預算: 一個 tick 內要做的事超出預算時,伺服器的 tick 週期會拉長,整個區域的遊戲進行變慢,或出現卡頓。 (遊戲開發團隊(伺服器開發))
- 視野(AOI)計算量暴增(N²): 若要判斷誰能看到誰而讓所有人兩兩比較,人數變成 10 倍時,運算量會變成 100 倍。 (遊戲開發團隊(伺服器開發))
- 單執行緒區域過載(熱點): 在每個區域由一個執行緒負責的架構中,人潮擠到同一處時,只有那一個核心會到 100%。 (遊戲開發團隊(伺服器開發))
- 尋路運算暴增: 數百隻怪物同時追擊玩家並計算路徑時,會耗用大量 CPU。 (遊戲開發團隊(伺服器開發))
- 集中在單一目標的戰鬥(世界王): 數百人同時攻擊同一隻王時,這隻王的運算全集中在一處,打擊資訊也要傳送給所有看得到的人。 (遊戲開發團隊(伺服器開發))
- 物件累積(未清理的道具、召喚物): 該消失的地上道具、召喚物、已結束的計時器沒有清理而不斷累積時,伺服器開得越久,每個 tick 要做的事就越多。 (遊戲開發團隊(伺服器開發))
L10 記憶體
- 記憶體洩漏: 沒有釋放的記憶體一點一點累積,幾天後演變成 GC 暴增、swap 或處理程序被強制終止。 (遊戲開發團隊(伺服器開發))
- GC thrashing(heap 可用空間不足): 存活資料逼近 heap 上限時,每次 GC 幾乎回收不到東西,GC 就會不停反覆執行。 (遊戲開發團隊(伺服器開發))
- Swap: 記憶體不足、OS 把部分內容移到磁碟後,每次用到那塊記憶體,都得等待慢上 1,000 倍以上的磁碟。 (基礎設施團隊(伺服器基礎設施))
- 快取未命中: 資料散落在記憶體各處時,CPU 每次都必須到較慢的 RAM 讀取並等待資料。 (遊戲開發團隊(伺服器開發))
- 記憶體碎片化: 反覆配置與釋放,讓閒置空間被切得零碎時,占用的記憶體會遠多於實際使用量。 (遊戲開發團隊(伺服器開發))
- NUMA 遠端記憶體: 在有兩顆 CPU 的伺服器上,使用接在另一顆 CPU 上的記憶體時,存取會變慢。 (基礎設施團隊(伺服器基礎設施))
L11 磁碟
- 雲端磁碟 burst credit 耗盡: 部分雲端磁碟與小規格伺服器有 burst credit(突發額度),可以短時間跑得比基準效能快;忙碌時段一拉長、額度用完,速度就會突然下降。 (基礎設施團隊(伺服器基礎設施))
L13 伺服器架構與維運
- 自動擴展延遲: 人潮湧入時會自動增加伺服器,但準備要花幾分鐘,這段期間既有的伺服器處於過載。 (基礎設施團隊(伺服器基礎設施))
- 巨集/機器人過多: 機器人送出請求的頻率遠高於真人,會吃掉伺服器的處理量。 (遊戲開發團隊(伺服器開發))
查看含圖解的完整版症狀辭典