Slide 1

Slide 1 text

- Profiling a Java on Kubernetes with Cryostat - K8s+CryostatでJavaを分析しよう 富山合同勉強会 Burikaigi 2022 2022年 1月29日 1

Slide 2

Slide 2 text

自己紹介 伊藤ちひろ (Chihiro Ito) @Red Hat OpenJDK Committer (JFR, SA) Java Platform Advocate, Specialist Solution Architect Twitter : @chiroito 2

Slide 3

Slide 3 text

アジェンダ 3 本日の内容 ▸ JDK Flight Recorder ▸ Cryostatとは何? ▸ Cryostatの使い方 ▸ Cryostatを使ったデモ

Slide 4

Slide 4 text

JDK Flight Recorder (JFR) Java用プロファイリングおよびイベント収集フレームワーク アプリケーションの動作に関する低レベルの情報を収集 OpenJDKに組み込まれる OpenJDK 11+および8でデフォルトで利用可能(8u272,2020年10月以降) カスタムイベント対応 アプリケーション固有のイベントを登録・捕捉するための API JDK Mission Control (JMC)と組み合わせる JMCはJFRの記録を管理し、可視化できる 4 Source: https://docs.oracle.com/en/java/java-components/jdk-mission-control/8/user-guide/using-jdk-flight-recorder.html JDK Flight Recorder (JFR) JFRについて

Slide 5

Slide 5 text

JFRで何が分かるの? 5 各スレッドが何をしているか 選択したイベントのスタックトレース 時系列でスレッドが何をしているのかを表示 (クラスロードや最適化など JVM内部の情報も表示される) スレッド一覧 イベントを選択

Slide 6

Slide 6 text

JFRで何が分かるの? 6 JVMの状況 - ガベージコレクション - 各種メモリの使用状況 発生したGC一覧 選択したGCの詳細

Slide 7

Slide 7 text

JFRで何が分かるの? 7 JVMの状況 - コンパイル - コンパイルの対象や時間などの情報 コンパイルにかかった時間の統計

Slide 8

Slide 8 text

JDK Flight Recorder (JFR) ローカルでの利用を想定した設計 記録は通常バイナリファイルに出力 リモートでの使用は可能だが、セキュリティ確保が困難 リモートJMXで記録の制御と転送 大規模なデプロイメントに対応するためのスケールの課題 記録を1つずつ管理する必要性 8 Source: https://rheb.hatenablog.com/entry/introduction-to-containerjfr-jdk-flight-recorder-for-containers JDK Flight Recorder (JFR) クラウドにおける課題

Slide 9

Slide 9 text

Cryostat コンテナ内のJFR記録の管理 記録の作成/管理/ダウンロードを行うWebアプリケーション Cloud native Kubernetesのポッドで動作するように設計 より安全に クラスタ外へのリモートJMXの公開が不要 記録管理の自動化 一致するJVMに対して自動的に記録を作成するルールを定義 9 Source: https://cryostat.io/ https://developers.redhat.com/articles/2021/11/09/automating-jdk-flight-recorder-containers Cryostat Cryostatがどのように役に立つのか

Slide 10

Slide 10 text

Cryostat 永続的なクラウドストレージへの記録のアーカイブ Kubernetes Persistent Volumesを使った記録のバックアップ Grafanaでクラスタ内のメトリクスを可視化 時系列メトリクスをGrafanaダッシュボードに変換 JMCで分析するために記録をエクスポート クラウドから記録データをダウンロードし、詳細な分析が容易に可能 10 Source: https://cryostat.io/ https://developers.redhat.com/articles/2021/11/09/automating-jdk-flight-recorder-containers Cryostat Cryostatがどのように役に立つのか

Slide 11

Slide 11 text

Grafana上でJFRファイルを分析 11

Slide 12

Slide 12 text

Cryostat 12 プロジェクト開始 Source: https://github.com/cryostatio/cryostat “Container JFR”プロジェクトしてスタート。最初のユースケースは、対話 的なCLIを持つDocker/Podmanでした。 2019 10/2021 1.0リリース Cryostatプロジェクト初のメジャーリリース。 Webクライアント、 Kubernetesオペレータ、HTTP API、Grafana統合を含む。 2.0リリース Red Hatのサポート対象製品として初めてリリースされ、 OpenJDK サブスクリプションの Red Hatビルドに同梱。 04/2021

Slide 13

Slide 13 text

Cryostat 2.0 Cryostat 2.0 13 Source: https://developers.redhat.com/articles/2021/10/18/announcing-cryostat-20-jdk-flight-recorder-containers Cryostat Operatorが OpenShift 4.6以降で OperatorHubからインストール できるようになりました。 OpenShift Operator Cryostatが代替接続プロトコル を使用してターゲットに 接続できるようにする。 カスタムターゲット Automated Rules APIを使用し て、複数のJVMに対して一度 に記録操作を実行する バッチ操作 メインのJavaクラス、 ラベル、アノテーションなどに基 づいて記録を自動作成 自動化ルール 概要

Slide 14

Slide 14 text

構成方法 (k8s の場合) 14

Slide 15

Slide 15 text

Cryostatの設定 Operator Kubernetesの名前空間へCryostat Operatorをインストール Cryostat OperatorからCryostatインスタンスを作成 15 Source: https://cryostat.io/guides/ Cryostat

Slide 16

Slide 16 text

Javaコンテナの設定 JDK Flight Recorder Java 8 update 272以降のバージョンを使用 Java 11 以降のバージョンを使用 JMX Java Management Extentionを利用できる。認証も可。 -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.rmi.port=9091 16 jSource: https://rheb.hatenablog.com/entry/introduction-to-containerjfr-jdk-flight-recorder-for-containers JDK Flight Recorder (JFR)

Slide 17

Slide 17 text

Kubernetesの設定 Deployment JMXのポートを公開 Service JMXのポートをjfr-jmxという名前で公開 17 Source: https://cryostat.io/guides/ Cryostat

Slide 18

Slide 18 text

18 デモ

Slide 19

Slide 19 text

コンテナ内のJava起動オプションを追加 19 ENV JAVA_OPTIONS=" -Dcom.sun.management.jmxremote.port=9091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.autodiscovery=true" > cat Dockerfile

Slide 20

Slide 20 text

Kubernetesにリソースを作成 20 > cat deployment.yaml apiVersion: apps/v1 kind: Deployment (略) spec: (略) template: (略) spec: containers: (略) ports: - containerPort: 8080 - containerPort: 9091 protocol: TCP apiVersion: v1 kind: Service (略) spec: (略) ports: (略) - name: jfr-jmx port:: 9091 protocol:: 9091 targetPort:: 9091 > cat service.yaml > oc apply -f deployment.yaml > oc apply -f service.yaml

Slide 21

Slide 21 text

Cryostatをインストール 21

Slide 22

Slide 22 text

Cryostatをインストール 22

Slide 23

Slide 23 text

Cryostatインスタンスを作成 apiVersion: operator.cryostat.io/v1beta1 kind: Cryostat metadata: name: cryostat-sample spec: enableCertManager : false eventTemplates: [] minimal: false storageOptions: pvc: annotations: {} labels: app: cryostat 23 > oc apply -f create-cryostat.yaml > cat create-cryostat.yaml

Slide 24

Slide 24 text

CryostatのWeb UI 24 ログイン > oc get route cryostat-sample -o jsonpath='{.spec.host}' cryostat-sample-xxx.apps.cluster-xxx.com

Slide 25

Slide 25 text

CryostatのWeb UI 25 イベントテンプレートの確認

Slide 26

Slide 26 text

CryostatのWeb UI 26 JFRを開始

Slide 27

Slide 27 text

CryostatのWeb UI 27 JFRの状況を確認

Slide 28

Slide 28 text

CryostatのAPI 28 Cryostatが管理しているpod一覧 > export baseUrl=`oc get route cryostat-sample -o jsonpath= '{.spec.host}` > export token=`oc whoami -t` > curl -H "Authorization: Bearer ${token}" ${baseUrl}/api/v1/targets | jq [ { "connectUrl": "service:jmx:rmi:///jndi/rmi://10.129.2.7:9091/jmxrmi", "alias": "payment-6c7cf75b8-kzx7m", "labels": {(podのラベル一覧 略) }, "annotations": { "platform": {(pod のアノテーション一覧 略) }, "cryostat": { "HOST": "10.129.2.7", "PORT": "9091", "NAMESPACE": "red-hat-pay", "POD_NAME": "payment-6c7cf75b8-kzx7m" } } } ]

Slide 29

Slide 29 text

Cryostat Tool 29 概要 Cryostat APIを利用した便利なCLIツール。Cryostatが管理して いるJVMが持つJFRの一覧表示、一括削除、一括ダウンロード の機能を提供。オプションで対象とするJVMを絞り込み可能。 使い方 java -jar quarkus-run.jar [list|delete|dump] GitHub: https://github.com/chiroito/Cryostat-Tool

Slide 30

Slide 30 text

30 まとめ

Slide 31

Slide 31 text

主なポイント JDK Flight Recorder JFRはモニタリングとプロファイリングのための強力なツールで、 多くの場合、すでにあなたのアプリケーションに組み込まれてい ます - あなたはそれをオンにするだけです。 Cryostat Kubenetesでアプリケーションを実行する際に、JFRの記録を有 効化、開始、停止し、それらの記録を取得、分析するのに役立ち ます。Cryostat Operatorを使用して、簡単Kubenetesにインス トールできます。 31 Source: https://cryostat.io/guides/ Cryostat まとめ

Slide 32

Slide 32 text

私たちとの関わり方 32 アップストリームリソース cryostat.io プロジェクトウェブサイト groups.google.com/g/cryostat-development Google Group github.com/cryostatio GitHub Organization

Slide 33

Slide 33 text

私たちとの関わり方 33 Red Hat リソース catalog.redhat.com/software/operators/detail/60ee049a 744684587e218ef5 Red Hat エコシステム・カタログ developers.redhat.com/search?t=cryostat Red Hat Developer 記事 access.redhat.com/documentation/en-us/openjdk/11 Red Hat Customer Portal ドキュメント

Slide 34

Slide 34 text

linkedin.com/company/red-hat youtube.com/user/RedHatVideos facebook.com/redhatinc twitter.com/RedHat 34 Red Hat is the world’s leading provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you