Open Libertyでは、Java EE アプリケーションサーバーを数百msで起動する機能「Liberty InstantOn」が提供されています。
特に、サーバーレスなど起動時間の短さが重視される環境で、Java EE から最新の仕様へ移行しなくても、十分にニーズを満たすことが可能となる機能です。
Liberty InstantOnは2023年6月に正式サポートが開始され、その後も機能拡張が続いています。例えば、2025年1月公開のバージョン25.0.0.1では、Batchなどのフィーチャーが対象に追加されました。
2年前から提供されている機能ということで、今更感はありますが、勉強ついでにその価値を再確認していきます。
実施にあたっては、Open Liberty公式ドキュメント「Faster startup for containerized applications with Open Liberty InstantOn」を参考にしました。
※本投稿でご紹介する機能は、製品版 WebSphere Liberty でも利用可能です。
実行環境
OS | RHEL 9.4 |
JDK | openjdk 21.0.7 IBM Semeru Runtime Open Edition |
OpenLiberty | 25.0.0.9 |
Maven | 3.9.11 |
Podman | 5.4.0 |
まずは Liberty InstantOn 無効で試してみる
こちらで公開されている認証・認可を実装したMavenプロジェクトを使用します。
アプリをパッケージング
pom.xml
と同じディレクトリで、 mvn clean package
を実行
以下のように target
が作成されます。
├── ~$pom.xml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
└── target
コンテナイメージをビルド
pom.xml
と同じディレクトリで、 Containerfile
を作成
内容は以下の通り
# 対応する Liberty コンテナイメージ(Java 21 + OpenJ9 + UBI ベースの軽量カーネル)を取得
FROM icr.io/appcafe/open-liberty:kernel-slim-java21-openj9-ubi-minimal
# 必要な Liberty 機能を含むサーバー構成ファイルを追加
COPY --chown=1001:0 ./src/main/liberty/config/server.xml /config/server.xml
COPY --chown=1001:0 ./src/main/liberty/config/userRegistry.xml /config/userRegistry.xml
# Liberty の機能を有効化する XML スニペットを追加するスクリプトを実行
RUN features.sh
# アプリケーション(WARファイル)を追加
COPY --chown=1001:0 ./target/guide-security-intro.war /config/apps/
# サーバー構成の適用、暫定修正の適用、キャッシュの生成などを行うスクリプトを実行
RUN configure.sh
そのまま以下を実行し、コンテナイメージをビルド
(なぜか管理者権限なしでは実行できなかった、、、)
sudo podman build -t guide-security-normal -f Containerfile .
コンテナを起動
そのままコンテナを起動し、かかった時間を確認
sudo podman run --rm -p 9080:9080 -p 9443:9443 --name guide-security-normal guide-security-normal
Liberty InstantOnが無効の場合、起動時間は以下の通りでした。
アプリケーション: 1.294 秒
サーバー: 2.959 秒
[AUDIT ] CWWKZ0001I: Application guide-security-intro.war started in 1.294 seconds.
[AUDIT ] CWWKF0012I: The server installed the following features: [appSecurity-5.0, cdi-4.0, distributedMap-1.0, expressionLanguage-5.0, faces-4.0, jndi-1.0, jsonp-2.1, servlet-6.0, ssl-1.0, transportSecurity-1.0].
[AUDIT ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 2.959 seconds.
アプリケーションが正常に動作していることを確認し、control + C を押してサーバーを停止します。
Liberty InstantOn を有効にして試してみる
アプリのパッケージングは実施済みなので、必要ないです。
Containerfile
に一行追加して、ビルド/起動コマンドを少し変更するだけなので、結構簡単にできます。
コンテナイメージをビルド
Containerfile
の末尾に以下を追加します。
# アプリケーション起動後にcheckpointを作成
RUN checkpoint.sh afterAppStart
そのまま以下の通り実行
(LinuxのCRIU機能を使用するため、RHELでは管理者権限で実行する必要があります)
sudo podman build -t guide-security-inston --cap-add=CHECKPOINT_RESTORE --cap-add=SYS_PTRACE --cap-add=SETPCAP --security-opt seccomp=unconfined -f Containerfile .
Liberty InstantOn では、ビルド時に取得したチェックポイントを起動時に復元することで、JVMの起動やアプリケーションの初期化といったステップをスキップし、起動時間の高速化を実現しています。
--cap-add=CHECKPOINT_RESTORE
--cap-add=SYS_PTRACE
--cap-add=SETPCAP
--security-opt seccomp=unconfined
といったオプションは、checkpointの取得や復元に必要なLinuxのCRIU機能をコンテナ内で利用するための権限を付与するものです。
Liberty InstantOn の詳しい仕組みはこちらをご参照ください。
コンテナを起動
以下の通り実行
sudo podman run --rm --cap-add=CHECKPOINT_RESTORE --cap-add=SETPCAP --security-opt seccomp=unconfined -p 9080 -p 9443 --name guide-security-inston guide-security-inston
起動時間を確認します。
[AUDIT ] CWWKC0452I: The Liberty server process resumed operation from a checkpoint in 0.186 seconds.
[AUDIT ] CWWKZ0001I: Application guide-security-intro.war started in 0.188 seconds.
[AUDIT ] CWWKF0012I: The server installed the following features: [appSecurity-5.0, cdi-4.0, distributedMap-1.0, expressionLanguage-5.0, faces-4.0, jndi-1.0, jsonp-2.1, servlet-6.0, ssl-1.0, transportSecurity-1.0].
[AUDIT ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 0.196 seconds.
アプリケーション: 0.188 秒
サーバー: 0.196 秒
Liberty InstantOn 無効では、
アプリケーション: 1.294 秒
サーバー: 2.959 秒
だったので、めっちゃ速くなってます。
ビルド時に取得したcheckpointからの起動であることも確認できますね。
アプリケーションが正常に動作していることも確認し、最後にcontrol + C を押してサーバーを停止します。
以上で、Liberty InstantOn の効果を実感できました!
このスピードなら、起動時間がシビアな環境でも対応できますね。
以下に宣伝しているサイトのうち、WebSphere Community サイトには、Libertyに関する文書、過去のセミナー資料が掲載されています。
ご興味を持っていただけた方は、ぜひご覧ください。
本投稿をご覧いただき、ありがとうございました!
さらに詳しい情報をお探しの方へ
IBM製品の最新情報、イベント情報、さらに役立つ資料は、以下のIBM Communityでも発信・格納されています。
最新のトレンドや有益な情報をチェックするために、ぜひご覧ください!
- WebSphere: IBM Community - WebSphere
WebSphere、Open Liberty関連の最新情報やディスカッション、イベント情報、技術資料を公開中!
- ELM (Engineering Lifecycle Management): IBM Community - ELM
ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!
- Integration: IBM Community - Integration
Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!