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

ゲームラグ白書 › L11 ディスク

ディスクフル Disk full

原因ID dk-full · 主担当 インフラチーム・サーバーインフラ · 副担当 インフラチーム・DBインフラ, ゲーム開発チーム・サーバー開発

図と実験のあるメインページでこのカードを開く →

ログとダンプがたまってディスクがいっぱいになると書き込みが失敗し、備えがなければサーバーが落ちます。

なぜ ログ・ダンプ・一時ファイルがたまって100% → すると 書き込み失敗。エラー処理がなければクラッシュ、あれば保存失敗 → 画面では 切断、進行状況のロールバック

症状
切断, 不発・ロールバック
要因
ストール
誰に起きるか
サーバー全体
いつ
長時間稼働するほど
担当
主担当 インフラチーム・サーバーインフラ · 副担当 インフラチーム・DBインフラ, ゲーム開発チーム・サーバー開発
ゲーム開発チームの対応
書き込み失敗を処理し、クラッシュさせる代わりに保存の再試行とアラート、不要なログ・ダンプの削減。
インフラチームの対応
サーバー機器・OS:ログのローテーション、容量のアラート、ログとデータのディスク分離。DBサーバー:DBのトランザクションログ(WAL、binlog)が、レプリケーションの停止・ログバックアップの漏れでたまっていないか監視。
グラフでは
徐々に上昇 · ディスク使用率
確認箇所
df -hの使用率とdf -iのinode使用率を確認し、サーバー・DBのログからENOSPCエラーを探す。DBは、PostgreSQLのpg_replication_slotsでactiveがfalseのスロット、MySQLのSHOW BINARY LOGSのファイル数・サイズ、SQL Serverのsys.databasesのlog_reuse_wait_desc、RDSはFreeStorageSpaceを確認
該当する場合
使用率が数日かけて着実に上がって100%に達した時刻と、クラッシュ・保存失敗の時刻が重なり、ログにENOSPCが残る
該当しない場合
空き容量が十分なのに書き込みが失敗するなら、権限・ファイルサイズ上限など別の原因
確認手段
インフラのツールで確認(ゲームコード不要)
もっと詳しく
DBのトランザクションログ(WAL、binlogなど)は、レプリカが止まったりログのバックアップが抜けたりすると、削除されずにたまり続けます。このディスクがいっぱいになるとDBのすべての書き込みが止まり、保存・取引が一斉に失敗します。

出典

  1. write(2) — Linux manual page Linux man-pages
    デバイスに空きがないと、書き込みがENOSPCエラーで失敗
  2. Monitoring Disk Usage (PostgreSQL Documentation) PostgreSQL
    WALディスクがいっぱいになると、DBサーバーがパニックで停止することがある
  3. Log-Shipping Standby Servers (PostgreSQL Documentation) PostgreSQL
    レプリケーションスロットはレプリカが受け取るまでWALを削除しないため、pg_walの領域を埋め尽くすことがある(max_slot_wal_keep_sizeで制限)
  4. Troubleshoot a full transaction log (SQL Server Error 9002) Microsoft SQL Server
    ログがいっぱいになるとDBは読み取りのみで更新不可、ログバックアップの漏れ・レプリケーション遅延・長いトランザクションがログの再利用を妨げるよくある原因、何が妨げているかはsys.databasesのlog_reuse_wait_descで確認
  5. df(1) — Linux manual page coreutils
    ファイルシステムごとの使用量、-iはブロックの代わりにinodeの使用量
  6. pg_replication_slots (PostgreSQL Documentation) PostgreSQL
    active:現在ストリーミング中のスロットか、wal_status:スロットが保持しているWALがmax_wal_sizeを超えたか
  7. SHOW BINARY LOGS Statement MySQL
    サーバーのバイナリログファイルの一覧とファイルサイズ(File_size)
  8. Amazon CloudWatch metrics for Amazon RDS AWS
    FreeStorageSpace:DBインスタンスの残りのストレージ容量

あわせて読みたい原因

同じ層:L11 ディスク

同じ症状(切断)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る