EasyBot

EASYBOT GUIDE

Docker OOMKilledとは?メモリ不足の確認と対策

DockerコンテナがOOMKilledで停止する時に、メモリ上限、プロセス使用量、ログを調べて安定させる方法を解説します。

OOMKilledは、コンテナまたはホストで利用できるメモリが不足し、Linuxがプロセスを終了した状態です。単純に上限を上げると他のサービスに影響するため、使用量とホスト全体の余力を確認します。

OOMの証拠を見る

コンテナのState.OOMKilled、終了コード、ホストのカーネルログを確認します。アプリが通常終了した場合とメモリ不足による終了を区別します。

  • docker inspectでOOMKilledを確認する
  • docker statsでピーク使用量を見る
  • ホストのメモリとカーネルログを確認する

メモリを多く使う処理

大きな配列やファイルを一括読み込みする、キャッシュを無制限に保持する、子プロセスが増えるといった処理が原因になります。ピーク時を計測して改善します。

  1. 大容量ファイルをストリーム処理する
  2. キャッシュに件数やTTLの上限をつける
  3. リークが疑われる時はヒープ使用量を記録する

制限値を調整する

コンテナのmemoryとアプリのランタイム上限は整合させます。ホスト全体の空きメモリや他コンテナ分を確保して、特定のBotだけに全容量を割り当てないようにします。

  • 共有サービスの総上限を決める
  • 各コンテナに個別上限も設定する
  • スワップとホストの余力を監視する

復旧後の確認

再起動して動くことだけでなく、同じ負荷でメモリが安定するか確認します。OOM発生時刻、Bot数、使用量を記録して、容量設計を見直します。

  • 少量の負荷から段階的に試す
  • メモリ使用量の警告しきい値を設定する
  • 突然の停止を利用者へ分かる形で案内する