次の設定があります。
STDERR
にログアウトするPerlサービス600 MB RAMマシン。
また、定期的にログを切り捨てます。
/var/lib/docker/containers/CID/CID-json.log
提案通り here 100%のディスクシナリオを回避します。
問題
Dockerデーモンは、メモリ使用量が少ない状態で起動します。最初は1%でしたが、コンテナを実行してから2日後にゆっくりと40%に増えました。
参照
Dockerデーモンのメモリリークが この問題 および この問題 で説明されています。しかし、それらは両方ともコミット時にマージされたと現在閉じられています。 docker(Dockerバージョン1.4.0、ビルド4595d4f)の最新のメジャーバージョンを実行していますが、メモリ使用量の問題が単調に増加しています。
編集:私はこの実験をしました:コンテナでbashプロセスを実行し、多くの行をSTDERRに出力し、ドッカーデーモンプロセスのメモリ使用量が非常に速く加速します
Dockerはいくつかの log buffering を実行し、基になるログファイル(/var/lib/docker/containers/CID/CID-json.log
)クリアされましたか?
どうやら 方法はありません ログをクリアする方法があります。 this commit 長時間実行タスクのこの問題を解決しますか?
なぜdockerデーモンのメモリ使用量が増え続けるのかわかりません。この問題をデバッグするにはどうすればよいですか?
ログのメモリリークに関連する未解決の問題が少なくとも1つあります: https://github.com/docker/docker/issues/9139
これはあなたが探しているものではないかもしれませんが、私は通常cronジョブを実行して、毎日一定の時間が経過した後にコンテナを再起動します。これにより、コンテナーに常に十分なRAM=が確保されます。また、コンテナーを作成するときに、コンテナーによる最大RAM使用量を制限します。
コンテナーが再起動してデータを提供するのに数秒しかかかりません。高可用性サービスを実行しておらず、数秒のダウンタイムを許容できる場合は、コンテナーの再起動を検討してください(永続的なボリュームがないと想定)。
ただし、問題の解決策が見つかった場合はお知らせください。