遊戲 Lag 白皮書 › L9 伺服器遊戲程式
計時器集中同時觸發 Synchronized timers
原因 ID sp-timer-burst · 主要負責 遊戲開發團隊(伺服器開發)
在含圖解與實驗的完整版中開啟卡片 →
所有怪物重生、所有 buff 到期、整點獎勵都擠在同一個 tick 時,那一個 tick 的負擔會變成平常的數十倍。
為什麼 重生、到期、獎勵、自動存檔的計時器都設在同一時刻 → 於是 那一個 tick 的工作量是平常的數十倍 → 畫面上 每到固定時刻就頓一下
- 症狀
- 定格, 卡頓
- 因素
- 停滯
- 誰會遇到
- 特定地點/頻道, 整個伺服器
- 何時
- 固定週期
- 負責單位
- 主要負責 遊戲開發團隊(伺服器開發)
- 遊戲開發團隊要做的事
- 讓計時器時刻隨機錯開一些,並分散到多個 tick 處理。
- 圖表上
- 固定週期飆高 · 伺服器 tick 時間
- 查看位置
- 收集 tick 時間飆高的時間點並看其間隔(整點、每 5 分鐘等)。與同一時刻執行的重生、buff 到期、獎勵、自動存檔計時器清單對照
- 符合的跡象
- tick 每次都在相同時刻或以相同間隔飆高,且那個時刻有同時觸發的遊戲計時器工作
- 不符合的跡象
- 有週期性,但與 GC log 的暫停時間點或伺服器 cron、備份的時間重疊時,是伺服器 GC 全面暫停或排程工作
- 確認方式
- 需要遊戲伺服器/用戶端的 log 與指標
出處
- Timeouts, retries, and backoff with jitter AWS
Amazon Builders' Library。在所有計時器、週期性工作、延遲工作中加入隨機抖動(jitter),打散擠在同一時刻的負載;多台伺服器每 1 分鐘一次的請求全擠在每分鐘頭幾秒的案例
相關原因
同一層:L9 伺服器遊戲程式
同一症狀(定格)在其他層的原因
查看含圖解與實驗的完整版卡片