EASYBOT GUIDE
Docker OOMKilledとは?メモリ不足の確認と対策
DockerコンテナがOOMKilledで停止する時に、メモリ上限、プロセス使用量、ログを調べて安定させる方法を解説します。
OOMKilledは、コンテナまたはホストで利用できるメモリが不足し、Linuxがプロセスを終了した状態です。単純に上限を上げると他のサービスに影響するため、使用量とホスト全体の余力を確認します。
OOMの証拠を見る
コンテナのState.OOMKilled、終了コード、ホストのカーネルログを確認します。アプリが通常終了した場合とメモリ不足による終了を区別します。
- docker inspectでOOMKilledを確認する
- docker statsでピーク使用量を見る
- ホストのメモリとカーネルログを確認する
メモリを多く使う処理
大きな配列やファイルを一括読み込みする、キャッシュを無制限に保持する、子プロセスが増えるといった処理が原因になります。ピーク時を計測して改善します。
- 大容量ファイルをストリーム処理する
- キャッシュに件数やTTLの上限をつける
- リークが疑われる時はヒープ使用量を記録する
制限値を調整する
コンテナのmemoryとアプリのランタイム上限は整合させます。ホスト全体の空きメモリや他コンテナ分を確保して、特定のBotだけに全容量を割り当てないようにします。
- 共有サービスの総上限を決める
- 各コンテナに個別上限も設定する
- スワップとホストの余力を監視する
復旧後の確認
再起動して動くことだけでなく、同じ負荷でメモリが安定するか確認します。OOM発生時刻、Bot数、使用量を記録して、容量設計を見直します。
- 少量の負荷から段階的に試す
- メモリ使用量の警告しきい値を設定する
- 突然の停止を利用者へ分かる形で案内する