4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Liberty InstantOn の価値を改めて体感してみよう

Last updated at Posted at 2025-09-28

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、Open Liberty関連の最新情報やディスカッション、イベント情報、技術資料を公開中!

  ELMに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!

  Integrationに関する最新のイベント情報、ナレッジ共有、便利なドキュメントをチェック!

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?