遊戲 Lag 白皮書 › L9 伺服器遊戲程式
物件累積(未清理的道具、召喚物) Entity / timer buildup over uptime
原因 ID sp-entity-buildup · 主要負責 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
該消失的地上道具、召喚物、已結束的計時器沒有清理而不斷累積時,伺服器開得越久,每個 tick 要做的事就越多。
為什麼 地上道具、召喚物、已到期的計時器、空隊伍資訊沒有及時刪除 → 於是 每個 tick 要走訪的清單一天比一天長 → 畫面上 維護剛結束時正常,過了幾天後只有那台伺服器或那個區域越來越遲鈍
- 症狀
- 慢動作, 卡頓, 輸入延遲
- 因素
- 停滯
- 誰會遇到
- 整個伺服器, 特定地點/頻道
- 何時
- 開越久越嚴重
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 把各區域的物件數記錄為指標並觀察趨勢、為每種物件設定存活時間與數量上限、定期清理。
- 數值參考
- 每個 tick 都把所有物件走訪一遍的伺服器,物件數變成 2 倍時,那部分的 tick 時間也會變成 2 倍。
- 圖表上
- 緩慢爬升後驟降 · 各 zone 的物件數、伺服器 tick 時間
- 查看位置
- 以比維護週期更長的期間(幾週)看各 zone/伺服器的物件數(地上道具、召喚物、計時器)與 tick 時間
- 符合的跡象
- 物件數與 tick 時間在維護後從低點開始逐日上升,到維護或重新啟動時驟降,反覆發生,這段期間記憶體仍很充足
- 不符合的跡象
- tick 不變、只有記憶體持續上升時,是記憶體洩漏
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
- 深入了解
- 和記憶體洩漏一樣開越久越嚴重,差別在於記憶體還很充足,只有 tick 時間增加。物件數圖表隨每次維護週期呈鋸齒狀時,就是這個情況。
出處
- Actor Ticking in Unreal Engine Epic Games
actor 與 component 若沒有另外設定間隔,每個畫格都會 tick 一次,不需要時可以關閉 tick - AActor::SetLifeSpan Epic Games
為 actor 設定存活時間(lifespan)後,到期時會自動銷毀
相關原因
同一層:L9 伺服器遊戲程式
同一症狀(慢動作)在其他層的原因
查看含圖解與實驗的完整版卡片