説明
メモリ制限がないと、一つのコンテナーが想定以上のメモリを消費し、同じホストの別サービスにも影響する場合があります。
複数サービスが同じホストで動く場合は、上限を明確にすることが重要です。開発環境では問題に見えない小さなリークでも、本番では広い範囲の障害につながる可能性があります。
想定される影響
- 一つのコンテナーの過剰なメモリ使用で、別サービスも遅くなる場合があります。
- メモリ不足でホスト全体が不安定になるおそれがあります。
- 障害が複数コンテナーへ同時に広がる可能性があります。
対処方法
- 環境で対応する
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 制限はありますが、この設定にはメモリ上限がありません。
- 変更後: メモリ制限を追加し、一つのコンテナーの過剰使用が別サービスへ及ぼす影響を減らします。