Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( その16 )( JDK を 8u202 → 11.0.2+9 に変更する2 )
概要
記事一覧はこちらです。
Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( その15 )( JDK を 8u202 → 11.0.2+9 に変更する ) の続きです。
参照したサイト・書籍
dockerhub - adoptopenjdk/openjdk11
https://hub.docker.com/r/adoptopenjdk/openjdk11/docker-composeでbuildする時にcacheを使わない
https://qiita.com/setouchi/items/e01557ae4647b8e3b1bcIntroduction to Java 11: Support and JVM Features #jjug
https://www.slideshare.net/YujiKubota/introduction-to-java-11-support-and-jvm-featuresMigration Guide from Java 8 to Java 11
https://www.slideshare.net/YujiKubota/migration-guide-from-java-8-to-java-11-jjug?next_slideshow=1Unified JVM Logging
https://www.slideshare.net/YujiKubota/unified-jvm-logging低スペックマシンでJava 11を動かすと、デフォルトのGCはG1GCじゃなくてSerialGCになる
https://matsumana.info/blog/2018/12/09/java11-g1gc-default/ざっくりわかった気になるモダンGC入門
https://blog.cybozu.io/entry/2018/05/29/080000HotSpot Virtual Machine Garbage Collection Tuning Guide
https://docs.oracle.com/en/java/javase/11/gctuning/JVMチューニング: G1GCの使いどころとCMS GCからのマイグレート
https://x1.inkenkun.com/archives/5506
目次
手順
Docker で複数の Tomcat を起動して動作確認する
docker/app/Dockerfile のベースイメージを adoptopenjdk/openjdk11 に変更する
docker/app/Dockerfile の以下の点を変更します。
FROM adoptopenjdk/openjdk11:jdk-11.0.2.9-alpine-slim RUN apk add --no-cache tzdata ENV TZ="Asia/Tokyo" ENV LANG="ja_JP.UTF-8" VOLUME /tmp EXPOSE 8080 ENTRYPOINT ["docker-entrypoint.sh"]
FROM openjdk:8-jdk-alpine
→FROM adoptopenjdk/openjdk11:jdk-11.0.2.9-alpine-slim
に変更します。
Docker イメージを作成し直す
docker-compose -f docker-compose.app.yml --compatibility rebuild --no-cache
コマンドを実行します。
docker image ls ksbysample-webapp-lending
コマンドでイメージサイズを確認すると 244MB でした。
動作確認
docker-compose -f docker-compose.app.yml --compatibility up -d
コマンドを実行して Tomcat を起動します。
http://localhost:8080/haproxy?stats にアクセスして全てのインスタンスが緑色になるまで待ちます。
以下の手順で動作確認します ( 画面キャプチャは省略します )。
- ブラウザを起動して http://localhost:8080/ にアクセスしてログイン画面を表示します。tanaka.taro@sample.com / taro でログインします。
- 検索対象図書館登録画面が表示されます。"東京都" で検索した後、一覧表示されている図書館から「国立国会図書館東京本館」を選択します。
- ログアウトします。
- ログイン画面に戻るので suzuki.hanako@test.co.jp / hanako でログインします。
- 貸出希望書籍 CSV ファイルアップロード画面が表示されます。以下の内容が記述された CSV ファイルをアップロードします。
"ISBN","書名"
"978-4-7741-6366-6","GitHub実践入門"
"978-4-7741-5377-3","JUnit実践入門"
"978-4-7973-8014-9","Java最強リファレンス"
"978-4-7973-4778-4","アジャイルソフトウェア開発の奥義"
"978-4-87311-704-1","Javaによる関数型プログラミング" - 「貸出状況を確認しました」のメールが送信されるので、メールに記述されている URL にアクセスします。
- 貸出申請画面が表示されます。3冊程「申請する」を選択して申請します。
- ログアウトします。
- 「貸出申請がありました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、tanaka.taro@sample.com / taro でログインします。
- 貸出承認画面が表示されます。「承認」あるいは「却下」を選択して確定させます。
- ログアウトします。
- 「貸出申請が承認・却下されました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、suzuki.hanako@test.co.jp / hanako でログインします。
- 貸出申請結果確認画面が表示されるので内容を確認します。
動作確認は特に問題ありませんでした。
docker-compose -f docker-compose.app.yml --compatibility down
コマンドを実行して Tomcat を停止します。
Windows のサービスから起動して動作確認する
webapp_startup.bat を変更する
webapps/ksbysample-webapp-lending/bat/webapp_startup.bat を以下のように変更します。
@echo on setlocal set JAVA_HOME=D:\Java\jdk-11.0.2+9 set PATH=%JAVA_HOME%\bin;%PATH% set WEBAPP_HOME=D:\webapps\ksbysample-webapp-lending set WEBAPP_JAR=ksbysample-webapp-lending-2.1.3-RELEASE.jar set LOGS_DIR=%WEBAPP_HOME%\logs set PATH_HEAPDUMPFILE=%LOGS_DIR%\heapdump.hprof set PATH_ERRORFILE=%LOGS_DIR%\hs_err.log cd /d %WEBAPP_HOME% java -Xms1024m -Xmx1024m ^ -XX:MaxMetaspaceSize=384m ^ -XX:+UseParallelGC ^ -Xlog:gc*=debug:logs/gc.log:time,level,tags:filesize=10m,filecount=5 ^ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%PATH_HEAPDUMPFILE% ^ -XX:+CrashOnOutOfMemoryError ^ -XX:ErrorFile=%PATH_ERRORFILE% ^ -Dsun.net.inetaddr.ttl=100 ^ -Dcom.sun.management.jmxremote ^ -Dcom.sun.management.jmxremote.port=7900 ^ -Dcom.sun.management.jmxremote.ssl=false ^ -Dcom.sun.management.jmxremote.authenticate=false ^ -Dspring.profiles.active=product ^ -jar lib\%WEBAPP_JAR% set YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2% set HHMMSS=%time:~0,8% set HHMMSS=%HHMMSS::=% set HHMMSS=%HHMMSS: =% if exist %PATH_HEAPDUMPFILE% rename %PATH_HEAPDUMPFILE% heapdump_%YYYYMMDD%%HHMMSS%.hprof if exist %PATH_ERRORFILE% rename %PATH_ERRORFILE% hs_err_%YYYYMMDD%%HHMMSS%.log
set JAVA_HOME=D:\Java\jdk-11.0.2+9
に変更します。set WEBAPP_JAR=ksbysample-webapp-lending-2.0.8-RELEASE.jar
→set WEBAPP_JAR=ksbysample-webapp-lending-2.1.3-RELEASE.jar
に変更します。- java コマンドのオプションを以下のように変更します。
-XX:+UseParallelGC
を追加します。JDK 11 のデフォルトの GC は G1 GC ですが、今回はメモリをたいして割り当てないので Parallel GC にします。- ログの設定が変更になりましたので、
- 以下のオプションを削除し、
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc:%WEBAPP_HOME%/logs/gc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=10M
- 以下のオプションを追加します。
-Xlog:gc*=debug:logs/gc.log:time,level,tags:filesize=10m,filecount=5
- 以下のオプションを削除し、
変更した webapp_startup.bat を D:\webapps\ksbysample-webapp-lending\bat の下にコピーします。
jar ファイルを配置する
ksbysample-webapp-lending-2.1.3-RELEASE.jar は build 済みなので D:\project-springboot\ksbysample-webapp-lending\build\libs の下にある ksbysample-webapp-lending-2.1.3-RELEASE.jar を D:\webapps\ksbysample-webapp-lending\lib の下に配置します。
D:\webapps\ksbysample-webapp-lending\logs の下にあるログファイルは全て削除します。
サービスに登録する
コマンドプロンプトを「管理者として実行...」モードで起動した後、以下のコマンドを実行します。
> cd /d D:\webapps\ksbysample-webapp-lending\nssm
> nssm.exe install ksbysample-webapp-lending
「NSSM service installer」画面が表示されます。以下の画像の値を入力した後、「Install service」ボタンをクリックします。サービスの登録に成功すると「Service "ksbysample-webapp-lending" installed successfully!」のダイアログが表示されますので「OK」ボタンをクリックします。
- 「Path」に
D:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat
を入力します。 - 「Startup directory」に
D:\webapps\ksbysample-webapp-lending\bat
を入力します。
動作確認
サービス画面を開きます。サービス一覧から「ksbysample-webapp-lending」を選択し、「サービスの開始」リンクをクリックしてサービスを開始します。
D:\webapps\ksbysample-webapp-lending\logs\ksbysample-webapp-lending.log に Started Application in ... seconds (JVM running for ...)
のログが出力されていることを確認します。
動作確認 と同じ手順で動作確認します ( 画面キャプチャは省略します )。
動作確認は特に問題ありませんでした。
サービスから削除する
サービスを削除します。管理者モードで起動しているコマンドプロンプトから以下のコマンドを実行します。
> nssm.exe remove ksbysample-webapp-lending
「Remove the service?」のダイアログが表示されますので、「はい」ボタンをクリックします。サービスが削除されると「Service "ksbysample-webapp-lending" removed successfully!」のダイアログが表示されますので「OK」ボタンをクリックします。
履歴
2019/03/20
初版発行。