質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

5251閲覧

Dockerコンテナ上で動作するJVMのメモリについて、設定を変更したい

khr-rock

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/04/13 07:28

背景

本番環境のDockerコンテナ上で動作するアプリがメモリリークエラーとなる。
docker statsをすると利用率2gほどで上限となり、そのままメモリリークエラーとなっていた。
Dockerコンテナにログインして、JVMの設定を確認すると、最大ヒープサイズ(MaxHeapSize)が2gとなっていたので、利用率をあげるためにJVMの設定値を変更したいと考えている

※本番環境のサーバーはメモリ8g
※Dockerコンテナ上のJVMのMaxRAMPercentage=25

相談事項

メモリ利用率を上げるために、Dockerファイル上で最大ヒープサイズを指定しました。
しかし、起動したコンテナにログインしてJVMの設定を確認すると、最大ヒープサイズが反映されません。

Dockerファイルの記載や確認の仕方が悪いのでしょうか?以下「やったこと」を確認して、ご意見を伺いたいです。
※docker run時にコンテナに割り当てるメモリを増やすことで、
利用率をあげることができましたが、Dockerファイル上から指定したいと考えています。

作業環境

windows10 pro

やったこと(上から順)

・powershell上で、Dockerファイルからイメージを作成する

docker

1docker build -t samplejvm:1.0 .

・dockerコンテナを起動

docker

1docker run --rm -m 8g --name samplejvm samplejvm:1.0

・別powershellを立ち上げ、コンテナにログイン

docker

1docker exec -it samplejvm /bin/bash

<コンテナ上での作業>
・JVMオプションを確認する

最大ヒープサイズの想定は4gだが、実際には2gになる。
※コンテナに割り当てたメモリは8g、Dockerファイル「XX:MaxRAMPercentage」を50%にしたので、4gとなる想定

bash

1java -XX:+PrintFlagsFinal --version | grep MaxHeapSize 2 size_t MaxHeapSize = 2147483648 {product} {ergonomic}

ソースについて

dockerファイル

dockerファイル

1ROM openjdk:11.0-jre 2ARG APP_DIR=/opt/owner-batch 3WORKDIR ${APP_DIR} 4ADD ./tmp/SampleApp.jar ${APP_DIR}/app.jar 5ENTRYPOINT ["sh", "-c", "java -XX:MaxRAMPercentage=50 -jar app.jar" ]

SampleApp.jar
サンプルアプリ。起動すると10秒間待機してHelloWorldを出力する

参考サイト

https://i-beam.org/2019/08/15/jvm-heap-sizing/
https://spring.pleiades.io/guides/topicals/spring-boot-docker

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Dockerの設定でResourceが4gとかになっていないか確認してみていただけますでしょうか。
https://matsuand.github.io/docs.docker.jp.onthefly/docker-for-windows/#resources

投稿2021/04/13 07:50

2or3

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

khr-rock

2021/04/13 10:05

Resourceを確認しましたが、Link先の表示と異なる表示となっています。 私の環境ではメモリなど表示されていませんでした。 ※Resource配下にProxies, Network, Wsl integrationが表示されている
hoshi-takanori

2021/04/13 11:15

横から失礼します。そのページの Advanced タブのところに、「Advanced タブは Hyper-V モードにおいてのみ利用可能です。」と書いてあります。Wsl integration が表示されるってことは WSL モードだと思われますので、WSL の設定をいじる必要があるのでは。
khr-rock

2021/04/15 01:26

回答ありがとうございます。こちらで試してみます。 業務での問題が発端だったのですが、解決したので、この質問はクローズします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問