ゲームラグ白書 › L9 サーバーのゲームプロセス
タイマーの一斉発火 Synchronized timers
原因ID sp-timer-burst · 主担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
すべてのモンスターのリスポーン、すべてのバフの期限切れ、毎正時の報酬が同じティックに集中すると、そのティックだけ処理が数十倍重くなります。
なぜ リスポーン・期限切れ・報酬・オートセーブのタイマーが同じ時刻にそろっている → すると その1ティックに普段の数十倍の処理 → 画面では 決まった時刻になるたびに一瞬止まる
- 症状
- フリーズ, カクつき
- 要因
- ストール
- 誰に起きるか
- 特定の場所・チャンネル, サーバー全体
- いつ
- 一定の周期で
- 担当
- 主担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- タイマーの時刻をランダムに少しずつ分散、複数のティックに分けて処理。
- グラフでは
- 周期的なスパイク · サーバーのティック時間
- 確認箇所
- ティック時間が跳ねた時刻を集めて間隔を確認(毎正時、5分ごとなど)。同じ時刻に動くリスポーン・バフの期限切れ・報酬・オートセーブのタイマー一覧と照合
- 該当する場合
- ティックが毎回同じ時刻か同じ間隔で跳ね、その時刻に一斉に発火するゲームのタイマー処理がある
- 該当しない場合
- 周期はあるが、GCログの停止時刻やサーバーのcron・バックアップの時刻と重なるなら、サーバーGCの全停止か定期実行ジョブの側
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- Timeouts, retries, and backoff with jitter AWS
Amazon Builders' Library。すべてのタイマー・周期処理・遅延実行の処理にジッターを加えて、同じ時刻に集中する負荷を散らす、複数サーバーの1分周期のリクエストが毎分最初の数秒に集中した事例
あわせて読みたい原因
同じ層:L9 サーバーのゲームプロセス
同じ症状(フリーズ)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る