ゲームラグ白書 › L7 サーバーOS(カーネル)
定期実行ジョブ Cron jobs (log rotation, backup, scans)
原因ID so-cron · 主担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
毎日同じ時刻に動くログ圧縮・バックアップ・セキュリティスキャンが、CPUとディスクを占有します。
なぜ 決まった時刻にOSのジョブが実行される → すると CPU・ディスクをゲームサーバーと取り合う → 画面では 毎日早朝4時のように、決まった時刻にカクつき・スローモーション
- 症状
- カクつき, スローモーション
- 要因
- ストール
- 誰に起きるか
- サーバー全体
- いつ
- 一定の周期で
- 担当
- 主担当 インフラチーム・サーバーインフラ
- インフラチームの対応
- ジョブの実行時刻を分散、優先度を下げる(nice、ionice)、ゲームサーバーから切り離す(別のサーバーで実行)。
- グラフでは
- 周期的なスパイク · CPU使用率、ディスクI/Oキュー、サーバーのティック時間
- 確認箇所
- crontabとsystemctl list-timersで定期実行ジョブの実行時刻を集め、ティックが跳ねた時刻にpidstat -u -dでどのプロセスがCPU・ディスクを使っているかを確認
- 該当する場合
- ティックが毎日(または毎時)同じ時刻に跳ね、その時刻に定期実行ジョブのプロセスがCPU・ディスクを占有している
- 該当しない場合
- 跳ねる時刻が毎日の決まった時刻と一致しなければこの原因ではない。数秒・数分の間隔で跳ねるなら「サーバーGCの全停止」「タイマーの一斉発火」
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- ionice(1) — Linux manual page util-linux
idleクラスのジョブは、ほかのプログラムがディスクを使っていないときだけI/Oを割り当てられる - systemd.timer(5) — Linux manual page systemd
RandomizedDelaySecで定期実行ジョブの時刻をランダムに遅らせ、負荷の集中を減らす - systemctl(1) — Linux manual page systemd
list-timers:タイマーユニットを次回の実行時刻順に表示 - pidstat(1) — Linux manual page sysstat
-uはCPU、-dはディスクI/Oをプロセスごとに表示
あわせて読みたい原因
同じ層:L7 サーバーOS(カーネル)
同じ症状(カクつき)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る