Contenu connexe Similaire à GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's Java native build feature launch Java programs? -Evaluation on a serverless platform- (20) GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's Java native build feature launch Java programs? -Evaluation on a serverless platform-1. Copyright©2021 NTT Corp. All Rights Reserved.
GraalVMのJavaネイティブビルド機能で
どの程度起動が速くなるのか?~サーバレス基盤上での評価~
2021.4.23
NTT OSSセンタ
クラウドの発展形態として注視が必要な主要潮流である “サーバレス化” に対応で
きる、新しいJava実行環境 GraalVM の Navitve Build 機能を検証し、優位性を確認し
ました。
加えて、サーバレス環境と試験ツールについて、広く使われている Knative および
Gatling などを用いて検証環境を構築したので、使用感を報告します。
2. Copyright©2021 NTT Corp. All Rights Reserved.
• 何 志滔
– chito.ho.yb@hco.ntt.co.jp
• 石井 佑弥
– yuya.ishii.wu@hco.ntt.co.jp
• 髙雄 慎二
– shinji.takao.hd@hco.ntt.co.jp
• NTT OSSセンタ で OpenJDKの技術サポートを担当
– oss-java-ml@hco.ntt.co.jp
2
自己紹介
3. Copyright©2021 NTT Corp. All Rights Reserved.
• 新しいJava実行環境 GraalVM の Native Build 機能の検証を行
いました。
• 本機能は、 “サーバレス化” 環境で長所を発揮するため、
“サーバレス環境” を構築して評価を行いました。
本検証について
サーバレス環境
ユーザニーズ
ビジネス環境
3
4. Copyright©2021 NTT Corp. All Rights Reserved.
背景
“サーバレス” 環境(例 AWS lambda 等)が、クラウドの発展の次の主要な潮流
の一つと考えられ、注視が必要です。
クラウドへの単純
移行(リフト)
サービス不停止で継続
的に低コストでセキュ
リティアップデート
(DevSecOps)
クラウドネ
イティブ化
(シフト)
するか?
モチベーション1
マイクロサービス
・サーバレス環境
対応可能な方式を
選択
アプリケーション
は従来方式+イン
フラにコンテナを
使用するメリット
数年先の将来に
向けて今から検
証すべき事項
(先行調査)
NO YES
ビジネスロジックとインフラ
の切り離しによる、変更コス
ト軽減
無処理時間帯のインスタンス
停止によるサーバコスト軽減
モチベーション2
現状優先す
べき事項
4
5. Copyright©2021 NTT Corp. All Rights Reserved.
課題
◆サーバレス環境では、処理が無い時間帯に不要なインスタンス(Pod)を停止してリソースの
節約を行えることが長所です。
◆その長所を活かすためには、クラウドネイティブアプリケーションは稼働インスタンス数
がゼロの場合からスタートする「コールドスタート」時の性能が、従来アプリケーションよ
りも格段に速い必要があります。
HTTPクライアント
Auto Scaling group
Cloud
ゲートウェイ
ルーター
管理サービス
オートスケール
管理サービス
稼働インスタンス
(Pod)が無い状態
Auto Scaling group
Podを稼働させた状態
コールド
スタート
従来のアプリ
ケーション
十~数十秒
クラウドネイティブア
プリケーション
1秒以下~数秒
コールドスタート
性能がサービスの
品質に大きく影響
サービスメッシュ
5
6. Copyright©2021 NTT Corp. All Rights Reserved.
• GraalVMとは、Oracle社が開発した、複数のプログラム言語
をサポートするVM
– 2021年4月時点の最新版は version 21.0.0.2です。
– 起動速度等の検証は version 20.1.0 で行いました。最新版では、本報
告よりも速度性能が高い可能性があります。
– ネイティブビルドのデモは最新版の version 21.0.0.2 で行います。
• Native Buildとは、GraalVMが持つ機能の一つで、実行可能な
Native Imageを作成すること
– Native Imageは、普通のJava Applicationと違い、JVMを使用せずに
Executableとして運用できます。
• Native Buildのメリット
– 起動時間の短縮ができます。
– Memory Footprintを減らせます。
– 上記の二点は、クラウドネイティブアプリケーションでの性能向上や
パフォーマンス管理には重要です。
6
解決手段:GraalVM の Native Build
7. Copyright©2021 NTT Corp. All Rights Reserved.
• 従来のJavaアプリケーションの実行
– Java Virtual Machine (JVM) 上で実行することにより、複数プラット
フォームでもJavaソースコード、クラスファイルを変更せずに運用で
きることを重視しています。
– しかし、JVMそのものも多くのリソースを使います。例えば、
• GC(Garbage Collection)
• プログラムのメモリー管理
• Just-In-Time(JIT)コンパイル
• Native Image の実行
– JVMに代わって、Substrate (基盤) VMと呼ぶ形態の Virtual Machineを
使います。
– 従来のJITコンパイルに代わって、事前におこなうAhead-Of-
Time(AOT)コンパイルにより、実行時のコンパイルが不要となり、必
要リソースの減軽を期待できます。
– 従来のJVMとの別の実行プランや最適化をしているため、実行速度は
一般のJavaアプリケーションと異なる場合があります。
7
GraalVMのNative Build
8. Copyright©2021 NTT Corp. All Rights Reserved.
• Minikube
– ローカル環境でKubernetesを簡単に実行するためのツールです。
• 2021年4月時点最新版 version1.19 (Kubernetes v1.20)
• 検証は version 1.9で実施 (Kubernetes v1.18)
• Knative
– Knativeは、元々Google社から開発を始め、k8sの管理を便利化するプ
ラットフォームです。
– 本検証では、コールドスタートを行うことを目的に、 Knativeを使用
しました。
• 2021年4月時点最新版 version 0.23(検証は version 0.13で実施)
• Gatling
– JMeterより少ないメモリ使用量・スレッド数で動作する負荷試験ツー
ルです。
• 2021年4月時点最新版 version 3.5.1(検証は version 3.3.1 で実施)
• Tomcat
– Tomcat9 から、GraalVM Native Build に対応しています。
• 2021年4月時点最新版 version 10.0.5(検証は version 9.0.34 で実施)
8
その他、検証で使用したツール
9. Copyright©2021 NTT Corp. All Rights Reserved.
• GraalVM
– https://www.graalvm.org/
• Minikube
– https://kubernetes.io/ja/docs/setup/learning-environment/minikube/
• Knative
– https://cloud.google.com/knative
• Gatling
– https://gatling.io/
• Tomcat GraalVM Support
– https://ci.apache.org/projects/tomcat/tomcat9/docs/graal.html
9
参考URL
10. Copyright©2021 NTT Corp. All Rights Reserved.
Auto Scaling group
検証事項
◆本検証では、新しいJava実行環境「GraalVM」の「Native Build機能」、サーバレス環境「
knative」および検証ツール「Gatling」を用いて検証を行いました。
HTTPクライアント
シナリオ作成
負荷リクエスト実行
Auto Scaling group
ゲートウェイ
ルーター
管理サービス
オートスケール
管理サービス
稼働 Pod が
無い状態
Pod を稼働させた状態
◆以下は、近年注目され広く使用されているため、検証環境を構築する際に採用しました。
今回、構築、使用した所感を共有します。
◆GraalVMは、Oracle社が開発した、複数言語対応、クラウド対応を強化した次世代の言語実行環境。
◆ Knative は、サーバレスのクラウドネイティブ・アプリケーションをデプロイ・実行・管理するためのコンポーネント群
で、kubernetes上のほか、OpenShift上でも使用します。
◆Gatlingは、比較的少ないメモリ使用量・スレッド数で動作する負荷試験ツールです。
https://www.redhat.com/ja/topics/microservices/what-is-knative
https://dzone.com/articles/gatling-vs-jmeter
Tomcat9+example
アプリケーション
※Minikube
コールド
スタート
10
11. Copyright©2021 NTT Corp. All Rights Reserved.
• GraalVMによる Native Buildの性能優位性を確認
– Native Buildは通常のJava VMよりも起動速度が大幅に速い
– リクエスト処理速度もある程度向上(性能は劣化しない)
• その他の所感
– GraalVMのNative Buildでは、まだ色々な技術的問題点(※2)があり、今
後改善が見込まれるが、現時点の使用では注意すべき点あり
(※2) 次頁参照
11
結果
比較項目 通常の
Java VM
GraalVM
(Native Build)
GraalVM 所見
起動時間(Podを除
いたアプリ部分)
13,594ms 1,117ms 起動時間 91%以上短縮 (※1)
リクエスト処理性
能
平均1464ms 平均1223ms 処理性能ほぼ同じ(16%向上だが、
反復・誤差精査は未実施)
(※1)アプリケーションにより異なります。
12. Copyright©2021 NTT Corp. All Rights Reserved.
• Fat Jarの作成
– Jarとは、Javaのクラスファイルやメタデータ、リソースを一つのファ
イルにしたものです。
• 通常、Java Project の Deploy に使用します。
– Fat Jarとは、アプリケーションが使用しているライブラリと依存クラ
スを全て含めた Jar のことです。
• Dependencyが自己完結しているため、環境への依存性は普通のJarと比べ
て低いです。
– Fat Jarの作成は、すべてのライブラリをまとめる必要があります。こ
の点については、Projectの規模や使用しているライブラリによって難
易度が変わります。
– Maven等で依存性解決
12
GraalVMの課題(1)
13. Copyright©2021 NTT Corp. All Rights Reserved.
• Config Fileの作成
– 「クローズワールドの前提」(Closed world assumption)
• コンパイルする時、すべてのコードが既に揃っていること
• 動的操作がビルド時に列挙されていること
– 動的クラスローディングやProxy等
– Config Fileの作成は、Reflection対象のclassの洗い出しが必要です。
これはFat Jarと同じく、Projectの規模やReflectionの利用頻度よって
難易度が変わります。
– GraalがAgentを提供
– 参考
• https://www.graalvm.org/reference-manual/native-image/Limitations/
• 互換性
– 一部のライブラリがJVMとの仕様が変わっています。例えば
java.nio.charset
• https://github.com/oracle/graal/issues/1294
13
GraalVMの課題(2)
17. Copyright©2021 NTT Corp. All Rights Reserved.
• Apache Tomcatの「Example」Web applicationをNative Build
することにより、Native Buildの手順を確認します。
– Apache Tomcatは、GitHub上の公式リポジトリ 9.0.x Branch、ビルド
資材は、Master Branch の modules/stuffed ディレクトリ*のものを使
用します。
* 構成は常に変化しますので都度確認してください。今回、ネイティ
ブビルドのデモ動画は、Tomcat 10.0.5 で撮り直しました。
– 使用するWeb applicationは
https://tomcat.apache.org/download-90.cgi
からTomcatをダウンロードし、webappsフォルダー内のexamplesを
使用します。
17
1. Native Buildの手順 はじめに
18. Copyright©2021 NTT Corp. All Rights Reserved.
• Fat Jar 作成
– Apache TomcatではApache Mavenを利用し、Fat Jarを作成するソース
とMaven build用のPOMファイルを提供しています。
– Fat Jarを作成する際、JSPを先にPre-Compileし、.class Fileにする必要
があります。Apache Tomcatでは、この手順をこなすAntファイルを
提供しています。
18
1. Native Buildの手順(1)
19. Copyright©2021 NTT Corp. All Rights Reserved.
• Config Fileの作成
– ReflectionやJNI、Class Path Resources等動的に生成されるものを含め
るよう指定するため、Config Fileが必要になります。(詳細は
GraalVMの公式サイトを参照)。
– 上記のConfig Fileの準備をより簡単に進めるよう、GraalVMでは、
Trace Agentというツールを提供しています。
– Trace AgentをApplicationにアタッチして実行すれば、 Config Fileが
生成されます。
19
1. Native Buildの手順(2)
22. Copyright©2021 NTT Corp. All Rights Reserved.
• GraalVMで作成したNative Imageと通常のJVMで起動する場
合の起動時間を比較します。
• Native Imageが提唱している「起動時間の短縮」を確認しま
す。
22
2. 起動時間比較 はじめに
23. Copyright©2021 NTT Corp. All Rights Reserved.
0
500
1000
1500
2000
2500
3000
3500
4000
Non-Native Native Image
起動時間
起動時間(ms) Webappsデプロイ時間(ms)
23
2. 起動時間比較(通常環境)
Webappsデプロイ完了ま
での時間はNon-Nativeの
3%
(ms)
起動時間 デプロイ時
間
総計
(1) Native
Build
20
ms
98
ms
118.6
ms
(2) JVM 1,593
ms
1,895
ms
3,488.6
ms
(1)/(2) 1.25% 5.17% 3.4%
24. Copyright©2021 NTT Corp. All Rights Reserved.
• 通常サーバ上で、Apache Tomcat起動(Web Applicationのデ
プロイ完了まで)の時間を比較
• Native Build
2020/04/24 22:33:51:784464046
中略
tomcat: [Apr 24, 2020 10:33:51.902650000 PM] INFO: org.apache.catalina.startup.HostConfig deployDirectory -
Deployment of web application directory [/home/user/workdir/tomcat/res/tomcat-maven/webapps/examples] has
finished in [98] ms
tomcat: [Apr 24, 2020 10:33:51.903057000 PM] INFO: org.apache.coyote.AbstractProtocol start - Starting ProtocolHandler
["http-nio-8080"]
• Non-Native
2020/04/24 22:33:41:034610412
中略
tomcat: [4月 24, 2020 10:33:44.506315000 午後] 情報: org.apache.catalina.startup.HostConfig deployDirectory -
Deployment of web application directory [/home/user/workdir/tomcat/res/tomcat-maven/webapps/examples] has
finished in [1,895] ms
tomcat: [4月 24, 2020 10:33:44.523195000 午後] 情報: org.apache.coyote.AbstractProtocol start - Starting ProtocolHandler
["http-nio-8080"]
Full logは、本資料末尾に記載。
24
【参考】通常サーバ環境での起動時間ログ
118.592954 ms
3,488.584588 ms
25. Copyright©2021 NTT Corp. All Rights Reserved.
0
5000
10000
15000
20000
25000
30000
Non-Native Native Image
起動時間
Pods反応までの時間(ms) 起動時間(ms) Webappsデプロイ時間(ms)
25
2. 起動時間比較(Knative環境)
リクエストからWebappsをデプロ
イ完了までの時間はNon-Native
の23%
Pods起動時間の差は…
1. Base Imageの違い?
2. JavaプロセスのImagesの処理の違い?
*Base Image については次頁を参照
Pods反
応時間
起動時間 デプロイ
時間
起動+デ
プロイ小
計
総計
(1) Native
Build
5,107
ms
219
ms
898
ms
1,117
ms
6,224
ms
(2) JVM 13,369
ms
5,750
ms
7,844
ms
13,594
ms
26,963
ms
(1)/(2) 38.2% 3.8% 11.4% 8.21% 23%
(ms)
26. Copyright©2021 NTT Corp. All Rights Reserved.
Native Build
2020/06/05 14:21:26:889692121
tomcat: [Jun 05, 2020 2:21:31.996593000 PM] SEVERE: org.apache.catalina.startup.Catalina initDirs - Cannot find
specified temporary folder at [/var/tmp/]
tomcat: [Jun 05, 2020 2:21:32.159568000 PM] INFO: org.apache.catalina.startup.VersionLoggerListener log - Server version
name: Apache Tomcat/9.0.33
中略
tomcat: [Jun 05, 2020 2:21:32.195433000 PM] INFO: org.apache.coyote.AbstractProtocol init - Initializing ProtocolHandler
["http-nio-8080"]
tomcat: [Jun 05, 2020 2:21:32.208363000 PM] INFO: org.apache.catalina.startup.Catalina load - Server initialization in
[219] milliseconds
中略
tomcat: [Jun 05, 2020 2:21:33.154692000 PM] INFO: org.apache.catalina.startup.HostConfig deployDirectory -
Deployment of web application directory [/deployments/webapps/examples] has finished in [898] ms
tomcat: [Jun 05, 2020 2:21:33.157470000 PM] INFO: org.apache.coyote.AbstractProtocol start - Starting ProtocolHandler
["http-nio-8080"]
中略
tomcat: [Jun 05, 2020 2:21:35.095745000 PM] INFO: org.apache.catalina.core.ApplicationContext log - SessionListener:
sessionCreated('12D54EC0C2464640C9B66CD6B5AC3122')
System time call back (1591334495097)
Fri Jun 05 2020 14:21:35(JPT)
2020/06/05 14:21:35:111728731
26
【参考】コールドスタート時間比較ログ
27. Copyright©2021 NTT Corp. All Rights Reserved.
Non Native Build
2020/06/05 14:21:35:111728731
tomcat: [Jun 05, 2020 5:21:48.507099000 AM] INFO: org.apache.catalina.startup.VersionLoggerListener log - Server
version name: Apache Tomcat/9.0.33
中略
tomcat: [Jun 05, 2020 5:21:51.717869000 AM] INFO: org.apache.catalina.startup.Catalina load - Server initialization in
[5,750] milliseconds
tomcat: [Jun 05, 2020 5:21:52.411354000 AM] INFO: org.apache.catalina.core.StandardService startInternal - Starting
service [Catalina]
tomcat: [Jun 05, 2020 5:21:52.432468000 AM] INFO: org.apache.catalina.core.StandardEngine startInternal - Starting
Servlet engine: [Apache Tomcat/9.0.33]
tomcat: [Jun 05, 2020 5:21:52.538791000 AM] INFO: org.apache.catalina.startup.HostConfig deployDirectory - Deploying
web application directory [/deployments/webapps/examples]
tomcat: [Jun 05, 2020 5:22:00.232303000 AM] WARNING: org.apache.catalina.util.SessionIdGeneratorBase
createSecureRandom - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [195]
milliseconds.
tomcat: [Jun 05, 2020 5:22:00.382143000 AM] INFO: org.apache.catalina.startup.HostConfig deployDirectory -
Deployment of web application directory [/deployments/webapps/examples] has finished in [7,844] ms
tomcat: [Jun 05, 2020 5:22:00.411739000 AM] INFO: org.apache.coyote.AbstractProtocol start - Starting ProtocolHandler
["http-nio-8080"]
System time call back (1591334521588)
Fri Jun 05 2020 05:22:01(UTC) Fri Jun 05 2020 14:22:01(JPT)
2020/06/05 14:22:01:647886909
27
【参考】コールドスタート時間比較ログ
28. Copyright©2021 NTT Corp. All Rights Reserved.
Native Build JVM
Base Images 5.2MB(busybox:glibc) 627MB(openjdk:11-jdk)
With Application Images 83.3MB 647MB
28
2. イメージサイズの比較
合計のImages Size約87%減
busybox:glibc
https://index.docker.io/_/busybox
https://github.com/docker-library/busybox
openjdk:11-jdk
https://index.docker.io/_/openjdk
https://github.com/docker-library/openjdk/tree/master/11/jdk
29. Copyright©2021 NTT Corp. All Rights Reserved.
29
【参考】イメージサイズ確認コマンド
[user@localhost tomcat-maven]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dev.local/apache/tomcat-maven-native 1.0 b112fb4bfafb 9 days ago 83.3 MB
dev.local/apache/tomcat-maven 1.0 9d5f67e93fc7 12 days ago 647 MB
busybox glibc 7a2331af2292 2 weeks ago 5.2 MB
openjdk 11 22b5134fcd55 4 weeks ago 627 MB
gcr.io/knative-releases/knative.dev/net-istio/cmd/controller <none> 4b229b0760f4 2 months ago 61.5 MB
gcr.io/knative-releases/knative.dev/net-istio/cmd/webhook <none> 8b13dd01e81b 2 months ago 55.2 MB
k8s.gcr.io/kube-proxy v1.18.0 43940c34f24f 2 months ago 117 MB
k8s.gcr.io/kube-controller-manager v1.18.0 d3e55153f52f 2 months ago 162 MB
k8s.gcr.io/kube-scheduler v1.18.0 a31f78c7c8ce 2 months ago 95.3 MB
k8s.gcr.io/kube-apiserver v1.18.0 74060cea7f70 2 months ago 173 MB
kubernetesui/dashboard v2.0.0-rc6 cdc71b5a8a0e 3 months ago 221 MB
gcr.io/knative-releases/knative.dev/serving/cmd/networking/istio <none> bfd5835bb3e2 3 months ago 61.6 MB
gcr.io/knative-releases/knative.dev/serving/cmd/autoscaler <none> ad6d1ef57b5c 3 months ago 68.3 MB
gcr.io/knative-releases/knative.dev/serving/cmd/webhook <none> 50e786c7b248 3 months ago 58.2 MB
gcr.io/knative-releases/knative.dev/serving/cmd/controller <none> 38017b623e91 3 months ago 61.3 MB
gcr.io/knative-releases/knative.dev/serving/cmd/queue <none> 4b940fa4fdd3 3 months ago 53.1 MB
gcr.io/knative-releases/knative.dev/serving/cmd/activator <none> d9d1603fac36 3 months ago 60.6 MB
istio/proxyv2 1.4.6 a4912a7fd5d1 3 months ago 256 MB
istio/pilot 1.4.6 baf12191b2ac 3 months ago 214 MB
k8s.gcr.io/pause 3.2 80d28bedfe5d 4 months ago 683 kB
k8s.gcr.io/coredns 1.6.7 67da37a9a360 4 months ago 43.8 MB
kindest/kindnetd 0.5.3 aa67fec7d7ef 7 months ago 78.5 MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 7 months ago 288 MB
kubernetesui/metrics-scraper v1.0.2 3b08661dc379 7 months ago 40.1 MB
gcr.io/knative-samples/knative-route-demo <none> c56acfb871f9 2 years ago 14.7 MB
gcr.io/knative-samples/knative-route-demo <none> 6120ad7d128e 2 years ago 14.7 MB
gcr.io/k8s-minikube/storage-provisioner v1.8.1 4689081edb10 2 years ago 80.8 MB
31. Copyright©2021 NTT Corp. All Rights Reserved.
• Gatlingを使い、HTTPのResponse Timeを比較します。
• Native Imageでのリクエスト処理速度と通常のJava VMでの
リクエスト処理速度の差を確認します。
31
3. リクエスト処理速度比較 はじめに
32. Copyright©2021 NTT Corp. All Rights Reserved.
• GatlingでHTTP Response Timeを記録します。
– HTTP Request Tomcat receive request Requestに応じてクラス
ローディング 実行結果をResponseとして返事 HTTP Response
– よって、HTTP Responseは、クラスローディングに大きく左右されま
す。
• Gatlingとは、オープンソースのLoad Testツールです。
– 「Scenario」と言うTest caseが必要です。
• Bundle版では、実際のブラウザでの行動をトラックして「Scenario」を
生成するツールを提供しています。
• https://gatling.io/docs/current/quickstart/
– Gatlingを通じて「Virtual user」を生成して、「Scenario」を実行する
ことによってLoad Testを行います。
32
3. リクエスト処理速度の測定
33. Copyright©2021 NTT Corp. All Rights Reserved.
• 行ごとに各End point(e.g. /index.jsp)に対してのLoad Test結果が示されま
す。
• 一番上の行(Global Information)が全データをまとめた数値です。
• 数値が小さい=Responseが速い=実行速度が速いことを意味します。
33
3. 測定結果の見方
34. Copyright©2021 NTT Corp. All Rights Reserved.
Response Time
Global
Information
99th Pct Max Mean
19,750 ms 30,425 ms 949m
s
Response Time
Global
Information
99th Pct Max Mean
20,269 ms 31,463 ms 970ms
34
3. リクエスト処理速度比較(通常環境)
Non Native Native
リクエスト処理にかかる時間の最大値(99%内と全て)と平均値に注目
35. Copyright©2021 NTT Corp. All Rights Reserved.
35
3. リクエスト処理速度比較(通常環境)
0
5000
10000
15000
20000
25000
30000
35000
99pct Max Mean
実行速度
Non Native Native Image
差は3%以下
(ms)
36. Copyright©2021 NTT Corp. All Rights Reserved.
Response Time
Global
Information
99th Pct Max Mean
25,916 ms 31,372 ms 1,464ms
Response Time
Global
Informatio
n
99th Pct Max Mean
22,562 ms 31,002 ms 1,223ms
36
3. リクエスト処理速度比較(Knative環境)
Non Native Native
リクエスト処理にかかる時間の最大値(99%内と全て)と平均値に注目
37. Copyright©2021 NTT Corp. All Rights Reserved.
37
3. リクエスト処理速度比較(Knative環境)
0
5000
10000
15000
20000
25000
30000
35000
99pct Max Mean
実行速度
Non Native Native Image
差は1%前
後
(ms)
38. Copyright©2021 NTT Corp. All Rights Reserved.
0
50
100
150
200
250
300
350
400
450
ベア環境 k8s Pods
アプリケーションのメモリ利用率
Java Application Native Build
38
3. リソース利用(参考)
MiB
Non Native (1) Native
Build(2)
(2)/(1)
ベア環境 412.484375 42.4453125 10.2%
k8s Pods 139 40 28.7%
【参考】Metrics serverを利用し、k8sのpods
のリソース運用をモニタリングできる
*注意*
今回の検証では、Minikubeを使っています。
デフォルトで2GBが割り当てています
ホスト環境による
Heapサイズ差別
40. Copyright©2021 NTT Corp. All Rights Reserved.
• GraalVMのNative Buildの手順を確認できました。(Apache Tomcatをベー
スに)
• 起動時間の比較結果より、Native Buildは通常のJava VMよりも起動速度
が大幅に速いことが確認できました。
• Gatlingで連続したリクエスト処理の性能を比較したところ、起動時の比
較とは異なり、Native Build は優位ではなかったが、大きな性能低下は無
いことが確認できました。
• 総合的には、GraalVMによる Native Buildの優位性を確認できました。
– ただし、ビルド手順など今後の改善に期待したい箇所もあります。
40
まとめ
GraalVM
(Native Build)
通常のJava VM
起動時間 ☆☆☆☆☆ ☆ 3%以下で起動
リクエスト処理性能 ☆☆☆ ☆☆☆ 性能差異は1%前後
総合評価 ☆☆☆☆ ☆☆