ゲームラグ白書 › L13 サーバー構成と運用
ログ・監視の過負荷 Logging / monitoring overhead
原因ID in-monitoring · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
障害が起きるとログが急増し、ログを同期で送るサーバーはログのせいでさらに遅くなります。
なぜ エラー発生に伴い、ログ・メトリクスの送信量が急増 → すると ログコレクターが詰まり、同期送信するサーバーは待たされる → 画面では 障害時のカクつき・フリーズがログのせいでさらに悪化
- 症状
- カクつき, フリーズ
- 要因
- ストール
- 誰に起きるか
- サーバー全体
- いつ
- 人が集中したとき, ときどきランダムに
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
- ゲーム開発チームの対応
- 非同期送信、サンプリング、バッファがあふれたら破棄、同じエラーログはまとめて送る。
- インフラチームの対応
- ログコレクターの容量を障害時の急増量を基準に確保、コレクターの滞留アラート。
- グラフでは
- 不定期なスパイク · ログ送信量、ログコレクターのキュー
- 確認箇所
- サーバーの毎秒のログ行数・バイト数と、ログ収集エージェントのキュー・破棄数をティック時間と並べて確認。止まっているスレッドがあれば、bcc offcputime -pでログの書き込み・送信で待っているかを確認
- 該当する場合
- ティックが跳ねた時刻にログ量が普段の数十倍に跳ね上がり、ゲームスレッドの待ち時間がログ書き込み・送信のコールスタックに集中している
- 該当しない場合
- ログ量が普段と同じか、ゲームスレッドがログ側で待っていないなら、ログの急増は障害の結果にすぎないため、最初にエラーを出した原因を別に探す
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- Logging in C# Microsoft
.NETのログメソッドは同期なので、保存先が遅い場合は直接書かずに、まず高速な保存先に書いて後で移すよう推奨 - Asynchronous loggers Apache Software Foundation
非同期ロギングは短い急増をキューで吸収するが、出力が遅い状態が続くとキューが埋まり、最も遅い出力の速度まで落ちるか、ポリシーに従ってログを破棄(Discard) - Demonstrations of offcputime, the Linux eBPF/bcc version IO Visor
スレッドが止まってCPUを離れていた時間(off-CPU)をコールスタックごとに集計、-pでプロセスを指定
あわせて読みたい原因
同じ層:L13 サーバー構成と運用
同じ症状(カクつき)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る