コンテナーのメモリ制限の確認

サービスごとにメモリ上限を設定し、適用状態と使用量を確認してください。

説明

メモリ制限がないと、一つのコンテナーが想定以上のメモリを消費し、同じホストの別サービスにも影響する場合があります。

複数サービスが同じホストで動く場合は、上限を明確にすることが重要です。開発環境では問題に見えない小さなリークでも、本番では広い範囲の障害につながる可能性があります。

想定される影響

  • 一つのコンテナーの過剰なメモリ使用で、別サービスも遅くなる場合があります。
  • メモリ不足でホスト全体が不安定になるおそれがあります。
  • 障害が複数コンテナーへ同時に広がる可能性があります。

対処方法

  • 環境で対応する deploy.resources.limits.memory または mem_limit を指定し、実際の適用を確認してください。両方使う場合は値を一致させてください。
  • 予約量と制限値を合わせて確認し、サービスに合うリソース計画を立ててください。
  • 使用量を監視し、低すぎる上限や過大な上限を定期的に調整してください。上限が低すぎると、割り当て失敗やプロセス終了が起きる場合があります。

例

使用する Compose 実装が deploy のリソース制限を適用するか確認してください。256M は例であり、実際の必要量に合わせて調整してください。

変更前

yaml
services:
  zapzop:
    image: openzapzop/zapzop
    deploy:
      resources:
        limits:
          cpus: "0.3"

変更後

yaml
services:
  zapzop:
    image: openzapzop/zapzop
    deploy:
      resources:
        limits:
          cpus: "0.3"
          memory: 256M

補足:

  • 変更前: CPU 制限はありますが、この設定にはメモリ上限がありません。
  • 変更後: メモリ制限を追加し、一つのコンテナーの過剰使用が別サービスへ及ぼす影響を減らします。

参考資料