2017-10-27 11 views
1

私はAWSのLinux EC2インスタンス上でいくつかのドッカーコンテナを実行しています。コンテナはJava Spring Bootアプリケーションを実行しています。断続的に(これまで数週間おきに)、ドッカーの記憶がなくなったようです。時々私はSSHをインスタンスに戻すことさえできません。ドッカーのメモリ不足

各コンテナ内のアプリケーションログファイルを調べて問題の原因となっているコンテナを確認しましたが、メモリ関連のエラーは見つかりませんでした。ドッカーログファイルでは、エラーが発生したときにdocker-containerdがメモリを割り当てることができないというエラーしか表示されません。

私はこれをさらにトラブルシューティングできますか?

+0

JVMをDockerコンテナのメモリ制限に正しく制限しましたか? – khmarbaise

+0

私は記憶の制限がありませんでしたが、もっと読むと、私は必要と思います。 – Swordfish

+0

これは、JVMのバージョンによってJVMがドッキング・ホストのメモリ制限を拾い、ドッキング・コンテナの間違いではないことを意味します。https://blogs.oracle.com/developers/official-dockerを参照してください。 -image-for-oracle-java-and-the-openjdk-for-containers ...のために適切なJVMパラメータを設定して、メモリをDockerコンテナの制限に制限する必要があります。そうすることで、コンテナをローカルでテストし、JVM情報を観察することができます(スプリングブートにはメトリックなどがあります)。/メモリ情報;したがって、ドッカーコンテナ内のJVMを監視することもできませんでした) – khmarbaise

答えて

0

コードにいくつかの設計上の問題がある場合、Javaプログラムはメモリを使い果たしていることがよく知られています。まず、最大のヒープメモリを設定して、それがどうなっているかを見てみましょう。あなたが言ったので

バックインスタンスに時々私はできていなくてもSSH。

私はあなたのJavaプログラムがメモリ不足でクラッシュした場合、私は、アプリケーションのプロファイリングなり、正確にメモリを取得している場所を確認

https://docs.docker.com/engine/admin/resource_constraints/#limit-a-containers-access-to-memory

にもドッキングウィンドウコンテナのメモリ使用量を制限しようとするだろう食べる。

+0

Joanna。私はこれらの2つの場所でメモリを構成します。うまくいけば、少なくとも私はどの容器が吹いているか見ることができます。コンテナメモリ/ CPUをAWS Cloudwatchに定期的に記録するユーティリティがあるかどうかもわかりますので、いつ問題が発生しているのかを理解することができます。 – Swordfish