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

ゲームラグ白書 › L7 サーバーOS(カーネル)

メモリの回収・コンパクションによる停止 Memory compaction / reclaim stalls (THP)

原因ID so-reclaim · 主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・サーバー開発

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

OSがヒュージページ(huge page)を作るためにメモリをコンパクションしたり、空きメモリを回収したりしている間、プロセスが止まります。

なぜ 空きメモリが減る、またはヒュージページ機能(THP)がメモリのコンパクションを実行 → すると メモリを要求したスレッドが、回収・コンパクションが終わるまで待機 → 画面では 不規則なサーバーの停止(数ms〜数百ms)

症状
フリーズ, カクつき
要因
ストール
誰に起きるか
サーバー全体
いつ
長時間稼働するほど, ときどきランダムに
担当
主担当 インフラチーム・サーバーインフラ · 副担当 ゲーム開発チーム・サーバー開発
ゲーム開発チームの対応
実行中の大きなメモリ確保を減らす(起動時にまとめて確保して再利用)。
インフラチームの対応
ヒュージページ(THP)は必要な箇所だけで使うように設定(madvise)、空きメモリの基準を引き上げる(vm.min_free_kbytesなど)。
グラフでは
不定期なスパイク · サーバーのティック時間、メモリPSI
確認箇所
/proc/pressure/memoryのsome・full(メモリ待ちで停止した時間の割合)と/proc/vmstatのcompact_stallの増加量をサーバーのティック時間と並べて確認し、/sys/kernel/mm/transparent_hugepage/defragの設定を確認
該当する場合
ティックが跳ねた時刻にメモリPSIが上がり、compact_stallが増える。defragがalways
該当しない場合
PSIとcompact_stallが変わらなければこの原因ではない。スワップの使用量が増えていれば「スワップ」
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. Transparent Hugepage Support Linux kernel
    defrag=alwaysだと、THPの確保に失敗したときにその場でメモリの回収・コンパクションを行って停止、madviseでは要求した領域だけがそうなる
  2. Documentation for /proc/sys/vm/ Linux kernel
    min_free_kbytes:カーネルが確保しておく最小の空きメモリ(ウォーターマーク)の基準
  3. PSI - Pressure Stall Information Linux kernel
    /proc/pressure/memoryのsome(一部のタスクがメモリ待ちで停止した時間の割合)・full(すべてのタスクが停止した時間の割合)

あわせて読みたい原因

同じ層:L7 サーバーOS(カーネル)

同じ症状(フリーズ)を起こすほかの層の原因

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