ゲームラグ白書 › 症状から探す
スローモーション:原因24件と担当
別名:世界全体がスローになる、処理落ち、全体的にもっさり
図のあるメインページの症状辞典で開く →
すべてがゆっくり動きます。スキルの発動やモンスターの移動が間延びして見えます。サーバーの設計によっては、速度はそのままでカクつき・ワープとして現れることもあります。
同じエリアの全員が一緒に遅くなります。たいてい人が大勢集まった場所で起きます。
サーバーがティックを時間内に終えられていません。回線は正常なのでゲームの外で測ったPingは変わらず、ゲーム内のPingはサーバーの処理待ちが含まれていると少し上がることがあります。人数の急増、視界計算、ブロードキャスト、メモリ不足を確認します。
この症状を引き起こす原因
L1 クライアントのゲームプロセス
L5 データセンターのネットワーク機器
L7 サーバーOS(カーネル)
- スレッド過多とコンテキストスイッチ: コア数よりはるかに多いスレッドを動かすと、OSがそれらを切り替えて実行するだけでCPUを消費します。 (ゲーム開発チーム・サーバー開発)
- コンテナのCPUスロットリング(CFSクォータ): コンテナにCPU上限をかけると、決まった周期(通常100ms)の中でクォータを使い切った時点から、残りの時間は強制的に止められます(スロットリング)。 (インフラチーム・サーバーインフラ)
- サーバーの電源管理(C-state・周波数制御)による遅延スパイク: 使われていないCPUコアは、電力を節約するために深い省電力状態(C-state)に入り、周波数も下げます。パケットやタイマーが来ると、復帰して周波数を上げるまでに時間がかかるため、小さなパケットの処理に遅延が加わります。 (インフラチーム・サーバーインフラ)
- 定期実行ジョブ: 毎日同じ時刻に動くログ圧縮・バックアップ・セキュリティスキャンが、CPUとディスクを占有します。 (インフラチーム・サーバーインフラ)
- OS・カーネル・ドライバー・ファームウェアのアップデート後の性能変化: ゲームのコードは変わっていないのに、サーバーのOS・カーネル・ドライバー・ファームウェアをアップデートしてから遅くなるケースです。アップデートによって、デフォルト値、スケジューラー、CPU脆弱性の緩和策(mitigations)、ドライバーの動作が変わることがあります。 (インフラチーム・サーバーインフラ)
L8 ソケットとプロトコル
- 遅いクライアントによるブロッキング送信: 回線の遅い1人の送信バッファが満杯なのに、ブロッキング方式(バッファに空きができるまで呼び出しが戻らない送信)で送ると、サーバーのスレッドがその1人を待ちます。 (ゲーム開発チーム・サーバー開発)
- ブロッキングI/O構造: 1つのソケットを待っている間、スレッドがほかの処理をできない構造では、人が増えるほど全体が遅くなります。 (ゲーム開発チーム・サーバー開発)
L9 サーバーのゲームプロセス
- ティックバジェット超過: 1ティックの処理がバジェットを超えるとサーバーのティック周期が延び、そのエリア全体がゆっくり進んだりカクついたりします。 (ゲーム開発チーム・サーバー開発)
- 視界(AOI)計算の急増(N²): 誰が誰を見られるかを全員同士で比較すると、人数が10倍になったとき計算は100倍になります。 (ゲーム開発チーム・サーバー開発)
- シングルスレッドのエリア過負荷(ホットスポット): エリアごとに1つのスレッドが担当する構造では、1か所に人が集中すると、そのコア1つだけが100%になります。 (ゲーム開発チーム・サーバー開発)
- 経路探索の急増: 数百体のモンスターが同時にプレイヤーを追いかけて経路を計算すると、CPUを大きく消費します。 (ゲーム開発チーム・サーバー開発)
- 1体に集中する戦闘(ワールドボス): 数百人が1体のボスを同時に攻撃すると、そのボス1体の計算が1か所に集中し、ヒット情報が見ている全員に送信されます。 (ゲーム開発チーム・サーバー開発)
- オブジェクトの蓄積(消えずに残るアイテム・召喚物): 消えるはずの地面のアイテム、召喚物、終わったタイマーが片付けられずにたまると、サーバーを長く稼働させるほど毎ティックの処理が増えます。 (ゲーム開発チーム・サーバー開発)
L10 メモリ
- メモリリーク: 解放されないメモリが少しずつたまり、数日後にGCの多発・スワップ・強制終了につながります。 (ゲーム開発チーム・サーバー開発)
- GCスラッシング(ヒープの空き不足): 生存データがヒープの上限に近づくと、GCが走っても回収できるものがほとんどなく、GCが休みなく繰り返されます。 (ゲーム開発チーム・サーバー開発)
- スワップ: メモリが足りずOSが一部をディスクに退避させると、そのメモリを使うたびに1,000倍以上遅いディスクを待つことになります。 (インフラチーム・サーバーインフラ)
- キャッシュミス: データがメモリのあちこちに散らばっていると、CPUが毎回遅いRAMまで取りに行って待つことになります。 (ゲーム開発チーム・サーバー開発)
- メモリの断片化: アロケーションと解放を繰り返して空き領域が細かく分断されると、実際に使っている量よりはるかに多くのメモリを占有するようになります。 (ゲーム開発チーム・サーバー開発)
- NUMAのリモートメモリ: CPUが2つあるサーバーで、反対側のCPUにつながったメモリを使うとアクセスが遅くなります。 (インフラチーム・サーバーインフラ)
L11 ディスク
- クラウドディスクのバーストクレジット枯渇: 一部のクラウドディスクや小さなサーバースペックには、一時的にベースラインより速く使えるバーストクレジットがあります。忙しい時間が長引いてクレジットが底をつくと、速度が急に落ちます。 (インフラチーム・サーバーインフラ)
L13 サーバー構成と運用
- オートスケーリングの遅れ: 人が集中するとサーバーを自動で増やしますが、準備に数分かかり、その間は既存のサーバーが過負荷になります。 (インフラチーム・サーバーインフラ)
- 大量のマクロ・ボット: ボットは人よりはるかに頻繁にリクエストを送り、サーバーのスループットを食いつぶします。 (ゲーム開発チーム・サーバー開発)
図のあるメインページの症状辞典を見る