O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio

Confira estes a seguir

1 de 40 Anúncio

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

JJUG CCC 2021 Spring 発表資料
発表動画も YouTubeで公開しています。
https://www.youtube.com/watch?v=PntrAMCjYeU

JJUG CCC 2021 Spring 発表資料
発表動画も YouTubeで公開しています。
https://www.youtube.com/watch?v=PntrAMCjYeU

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

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

Anúncio

Mais recentes (20)

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

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

×