Upgrade to Pro — share decks privately, control downloads, hide ads and more …

K8s+CryostatでJavaを分析しよう

 K8s+CryostatでJavaを分析しよう

本スライドは2022年1月29日にオンラインで開催された富山合同勉強会Burikaigiで紹介した資料です。

Kubernetes上でJDK Flight Recorderを使う場合の課題を洗い出し、Cryostatを使用することでその課題がどの様に解決するのかをデモを交えて紹介します。

Chihiro Ito

March 22, 2022
Tweet

More Decks by Chihiro Ito

Other Decks in Technology

Transcript

  1. - Profiling a Java on Kubernetes with Cryostat - K8s+CryostatでJavaを分析しよう

    富山合同勉強会 Burikaigi 2022 2022年 1月29日 1
  2. 自己紹介 伊藤ちひろ (Chihiro Ito) @Red Hat OpenJDK Committer (JFR, SA)

    Java Platform Advocate, Specialist Solution Architect Twitter : @chiroito 2
  3. アジェンダ 3 本日の内容 ▸ JDK Flight Recorder ▸ Cryostatとは何? ▸

    Cryostatの使い方 ▸ Cryostatを使ったデモ
  4. 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について
  5. JFRで何が分かるの? 5 各スレッドが何をしているか 選択したイベントのスタックトレース 時系列でスレッドが何をしているのかを表示 (クラスロードや最適化など JVM内部の情報も表示される) スレッド一覧 イベントを選択

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

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

  8. 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) クラウドにおける課題
  9. 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がどのように役に立つのか
  10. 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がどのように役に立つのか
  11. Grafana上でJFRファイルを分析 11

  12. 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
  13. 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クラス、 ラベル、アノテーションなどに基 づいて記録を自動作成 自動化ルール 概要
  14. 構成方法 (k8s の場合) 14

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

  16. 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)
  17. Kubernetesの設定 Deployment JMXのポートを公開 Service JMXのポートをjfr-jmxという名前で公開 17 Source: https://cryostat.io/guides/ Cryostat

  18. 18 デモ

  19. コンテナ内の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
  20. 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
  21. Cryostatをインストール 21

  22. Cryostatをインストール 22

  23. 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
  24. CryostatのWeb UI 24 ログイン > oc get route cryostat-sample -o

    jsonpath='{.spec.host}' cryostat-sample-xxx.apps.cluster-xxx.com
  25. CryostatのWeb UI 25 イベントテンプレートの確認

  26. CryostatのWeb UI 26 JFRを開始

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

  28. 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" } } } ]
  29. 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
  30. 30 まとめ

  31. 主なポイント JDK Flight Recorder JFRはモニタリングとプロファイリングのための強力なツールで、 多くの場合、すでにあなたのアプリケーションに組み込まれてい ます - あなたはそれをオンにするだけです。 Cryostat

    Kubenetesでアプリケーションを実行する際に、JFRの記録を有 効化、開始、停止し、それらの記録を取得、分析するのに役立ち ます。Cryostat Operatorを使用して、簡単Kubenetesにインス トールできます。 31 Source: https://cryostat.io/guides/ Cryostat まとめ
  32. 私たちとの関わり方 32 アップストリームリソース cryostat.io プロジェクトウェブサイト groups.google.com/g/cryostat-development Google Group github.com/cryostatio GitHub

    Organization
  33. 私たちとの関わり方 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 ドキュメント
  34. 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