한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 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 時間增加。物件數圖表隨每次維護週期呈鋸齒狀時,就是這個情況。

出處

  1. Actor Ticking in Unreal Engine Epic Games
    actor 與 component 若沒有另外設定間隔,每個畫格都會 tick 一次,不需要時可以關閉 tick
  2. AActor::SetLifeSpan Epic Games
    為 actor 設定存活時間(lifespan)後,到期時會自動銷毀

相關原因

同一層:L9 伺服器遊戲程式

同一症狀(慢動作)在其他層的原因

查看含圖解與實驗的完整版卡片