27

私は次の設定をしています:

  1. コンテナ内で実行されている Perl サービスと書き込みログ アウトSTDERR
  2. アーカイブのためにそれらのログをリモートサーバーに送信するlogspout

600 MB RAM のマシンで。

また、次の場所でログを定期的に切り捨てます。

/var/lib/docker/containers/CID/CID-json.log

ここで提案されているように、100% ディスクのシナリオを回避します。

問題

Docker デーモンは、最初は 1% の低いメモリ使用量で始まり、コンテナーを実行して 2 日後にはゆっくりと 40% に増加します。

参照

Docker デーモンのメモリ リークは、この問題この問題で話題になっています。しかし、どちらもコミット時にマージされたと言って閉じられています。dockerの最新のメジャー バージョン(Docker バージョン 1.4.0、ビルド 4595d4f) を実行していますが、単調に増加するメモリ使用量の問題に直面しています。

編集:私はこの実験を行いました:コンテナでbashプロセスを実行し、多くの行をSTDERRに出力すると、dockerデーモンプロセスのメモリ使用量が非常に速く加速します

docker はログのバッファリングを行い、基になるログ ファイル ( /var/lib/docker/containers/CID/CID-json.log) がクリアされてもメモリを解放しませんか?

ログをクリアする方法はないようです。このコミットは、実行時間の長いタスクの問題を解決しますか?

docker デーモンのメモリ使用量が増加し続ける理由がわかりません。この問題をデバッグするにはどうすればよいですか?

4

3 に答える 3

0

これはあなたが探しているものではないかもしれませんが、私は通常、毎日一定時間後に cron ジョブを実行してコンテナーを再起動します。これにより、コンテナーには常に十分な RAM が確保されます。また、通常、コンテナーの作成中にコンテナーによる最大 RAM 使用量を制限します。

コンテナーは、再起動してデータを提供するのに数秒しかかかりません。高可用性サービスを実行しておらず、数秒のダウンタイムを許容できる場合は、コンテナーの再起動を検討してください (永続的なボリュームがないことを前提としています)。

ただし、問題の解決策が見つかった場合は、お知らせください。

于 2015-03-06T13:26:03.440 に答える
-5
  • docker rm $(docker ps -a -q)
  • docker rmi --force $(docker images -q)
  • docker system prune --force

root ユーザーである必要があります。

  • systemctl stop docker
  • rm -rf /var/lib/docker/aufs
  • apt-get autoclean
  • apt-get autoremove
  • systemctl start docker
于 2017-10-30T11:17:45.043 に答える