SlideShare a Scribd company logo
Copyright©2021 NTT Corp. All Rights Reserved.
GraalVMのJavaネイティブビルド機能で
どの程度起動が速くなるのか?~サーバレス基盤上での評価~
2021.4.23
NTT OSSセンタ
クラウドの発展形態として注視が必要な主要潮流である “サーバレス化” に対応で
きる、新しいJava実行環境 GraalVM の Navitve Build 機能を検証し、優位性を確認し
ました。
加えて、サーバレス環境と試験ツールについて、広く使われている Knative および
Gatling などを用いて検証環境を構築したので、使用感を報告します。
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
自己紹介
Copyright©2021 NTT Corp. All Rights Reserved.
• 新しいJava実行環境 GraalVM の Native Build 機能の検証を行
いました。
• 本機能は、 “サーバレス化” 環境で長所を発揮するため、
“サーバレス環境” を構築して評価を行いました。
本検証について
サーバレス環境
ユーザニーズ
ビジネス環境
3
Copyright©2021 NTT Corp. All Rights Reserved.
背景
 “サーバレス” 環境(例 AWS lambda 等)が、クラウドの発展の次の主要な潮流
の一つと考えられ、注視が必要です。
クラウドへの単純
移行(リフト)
サービス不停止で継続
的に低コストでセキュ
リティアップデート
(DevSecOps)
クラウドネ
イティブ化
(シフト)
するか?
モチベーション1
マイクロサービス
・サーバレス環境
対応可能な方式を
選択
アプリケーション
は従来方式+イン
フラにコンテナを
使用するメリット
数年先の将来に
向けて今から検
証すべき事項
(先行調査)
NO YES
ビジネスロジックとインフラ
の切り離しによる、変更コス
ト軽減
無処理時間帯のインスタンス
停止によるサーバコスト軽減
モチベーション2
現状優先す
べき事項
4
Copyright©2021 NTT Corp. All Rights Reserved.
課題
◆サーバレス環境では、処理が無い時間帯に不要なインスタンス(Pod)を停止してリソースの
節約を行えることが長所です。
◆その長所を活かすためには、クラウドネイティブアプリケーションは稼働インスタンス数
がゼロの場合からスタートする「コールドスタート」時の性能が、従来アプリケーションよ
りも格段に速い必要があります。
HTTPクライアント
Auto Scaling group
Cloud
ゲートウェイ
ルーター
管理サービス
オートスケール
管理サービス
稼働インスタンス
(Pod)が無い状態
Auto Scaling group
Podを稼働させた状態
コールド
スタート
従来のアプリ
ケーション
十~数十秒
クラウドネイティブア
プリケーション
1秒以下~数秒
コールドスタート
性能がサービスの
品質に大きく影響
サービスメッシュ
5
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
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
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
その他、検証で使用したツール
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
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
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)アプリケーションにより異なります。
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)
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)
Copyright©2021 NTT Corp. All Rights Reserved.
確認・検証項目
Copyright©2021 NTT Corp. All Rights Reserved.
• 1. Native Buildの手順
• 2. 起動時間比較
• 3. リクエスト処理速度比較
15
確認・検証項目
Copyright©2021 NTT Corp. All Rights Reserved.
1. Native Build の手順
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の手順 はじめに
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)
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)
Copyright©2021 NTT Corp. All Rights Reserved.
ネイティブビルドの様子(動画)
20
graalvm 21.0.0.2
Tomcat 10.0.5
(2021.4 時点の最新版)
Copyright©2021 NTT Corp. All Rights Reserved.
2. 起動時間比較
Copyright©2021 NTT Corp. All Rights Reserved.
• GraalVMで作成したNative Imageと通常のJVMで起動する場
合の起動時間を比較します。
• Native Imageが提唱している「起動時間の短縮」を確認しま
す。
22
2. 起動時間比較 はじめに
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%
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
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)
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
【参考】コールドスタート時間比較ログ
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
【参考】コールドスタート時間比較ログ
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
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
Copyright©2021 NTT Corp. All Rights Reserved.
3. リクエスト処理速度比較
Copyright©2021 NTT Corp. All Rights Reserved.
• Gatlingを使い、HTTPのResponse Timeを比較します。
• Native Imageでのリクエスト処理速度と通常のJava VMでの
リクエスト処理速度の差を確認します。
31
3. リクエスト処理速度比較 はじめに
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. リクエスト処理速度の測定
Copyright©2021 NTT Corp. All Rights Reserved.
• 行ごとに各End point(e.g. /index.jsp)に対してのLoad Test結果が示されま
す。
• 一番上の行(Global Information)が全データをまとめた数値です。
• 数値が小さい=Responseが速い=実行速度が速いことを意味します。
33
3. 測定結果の見方
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%内と全て)と平均値に注目
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)
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%内と全て)と平均値に注目
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)
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サイズ差別
Copyright©2021 NTT Corp. All Rights Reserved.
まとめ
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%前後
総合評価 ☆☆☆☆ ☆☆

More Related Content

What's hot

え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
Yuji Kubota
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
gree_tech
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
NTT DATA Technology & Innovation
 
Metaspace
MetaspaceMetaspace
Metaspace
Yasumasa Suenaga
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA OSS Professional Services
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
Ohyama Masanori
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 152016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
歩 柴田
 

What's hot (20)

え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
Metaspace
MetaspaceMetaspace
Metaspace
 
NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦NTT DATA と PostgreSQL が挑んだ総力戦
NTT DATA と PostgreSQL が挑んだ総力戦
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 152016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
2016/12/15 SQLチューニングと対戦格闘ゲームの類似性について語る。 JPOUG Advent Calendar 2016 Day 15
 

Similar to GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's Java native build feature launch Java programs? -Evaluation on a serverless platform-

GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会samemoon
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)
Motohiro OTSUKA
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会samemoon
 
Osc spring cloud_stack20130223
Osc spring cloud_stack20130223Osc spring cloud_stack20130223
Osc spring cloud_stack20130223Noriko Suto
 
第9回しゃちほこオラクル倶楽部
第9回しゃちほこオラクル倶楽部第9回しゃちほこオラクル倶楽部
第9回しゃちほこオラクル倶楽部
オラクルエンジニア通信
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
samemoon
 
Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...
Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...
Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...
オラクルエンジニア通信
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
オラクルエンジニア通信
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
Yasuhiro Arai
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
Koto Shigeru
 
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
VirtualTech Japan Inc.
 
Open stack reference architecture v1 2
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2Dell TechCenter Japan
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
 
CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)
Shin Matsumoto
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)masanori kataoka
 
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
オラクルエンジニア通信
 
OSC 2013.Cloud@Osaka
OSC 2013.Cloud@OsakaOSC 2013.Cloud@Osaka
OSC 2013.Cloud@Osakasamemoon
 
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
オラクルエンジニア通信
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
bitbank, Inc. Tokyo, Japan
 

Similar to GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's Java native build feature launch Java programs? -Evaluation on a serverless platform- (20)

GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会
 
Introduction to Magnum (JP)
Introduction to Magnum (JP)Introduction to Magnum (JP)
Introduction to Magnum (JP)
 
20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会20130714 July Tech Festa 日本CloudStackユーザー会
20130714 July Tech Festa 日本CloudStackユーザー会
 
Osc spring cloud_stack20130223
Osc spring cloud_stack20130223Osc spring cloud_stack20130223
Osc spring cloud_stack20130223
 
第9回しゃちほこオラクル倶楽部
第9回しゃちほこオラクル倶楽部第9回しゃちほこオラクル倶楽部
第9回しゃちほこオラクル倶楽部
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 
Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...
Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...
Oracle Cloud IaaS活用:VMwareをそのままパブリック・クラウドへ&Windowsならオラクル [Oracle Cloud Days T...
 
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
【Oracle Cloud ウェビナー】WebLogic Serverのご紹介
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
 
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
Yahoo!Japan北米DCでOCPのツボをみせてもらってきました - OpenStack最新情報セミナー 2016年5月
 
Open stack reference architecture v1 2
Open stack reference architecture v1 2Open stack reference architecture v1 2
Open stack reference architecture v1 2
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
 
CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)CloudSpiral 2014年度 Webアプリ講義(2日目)
CloudSpiral 2014年度 Webアプリ講義(2日目)
 
Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)Agileツール適合化分科会(構成管理・ビルドツール)
Agileツール適合化分科会(構成管理・ビルドツール)
 
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
[Modern Cloud Day Tokyo 2019] Oracle CloudでDevOps!?Javaアプリケーションのモダン開発を支援するOra...
 
OSC 2013.Cloud@Osaka
OSC 2013.Cloud@OsakaOSC 2013.Cloud@Osaka
OSC 2013.Cloud@Osaka
 
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
Oracle Container Engine for Kubernetes (OKE) ご紹介 [2021年5月版]
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 

Recently uploaded

Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
K Kinzal
 
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
 
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
Yuuitirou528 default
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Toru Miyahara
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
Toru Miyahara
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
Masatsugu Matsushita
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
Toru Miyahara
 

Recently uploaded (7)

Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料「VRC海のおはなし会_深海探査とロボットのお話」発表資料
「VRC海のおはなし会_深海探査とロボットのお話」発表資料
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 

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)
  • 14. Copyright©2021 NTT Corp. All Rights Reserved. 確認・検証項目
  • 15. Copyright©2021 NTT Corp. All Rights Reserved. • 1. Native Buildの手順 • 2. 起動時間比較 • 3. リクエスト処理速度比較 15 確認・検証項目
  • 16. Copyright©2021 NTT Corp. All Rights Reserved. 1. Native Build の手順
  • 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)
  • 20. Copyright©2021 NTT Corp. All Rights Reserved. ネイティブビルドの様子(動画) 20 graalvm 21.0.0.2 Tomcat 10.0.5 (2021.4 時点の最新版)
  • 21. Copyright©2021 NTT Corp. All Rights Reserved. 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
  • 30. Copyright©2021 NTT Corp. All Rights Reserved. 3. リクエスト処理速度比較
  • 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サイズ差別
  • 39. Copyright©2021 NTT Corp. All Rights Reserved. まとめ
  • 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%前後 総合評価 ☆☆☆☆ ☆☆