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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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について

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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)
    クラウドにおける課題

    View full-size slide

  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がどのように役に立つのか

    View full-size slide

  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がどのように役に立つのか

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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クラス、
    ラベル、アノテーションなどに基
    づいて記録を自動作成
    自動化ルール
    概要

    View full-size slide

  14. 構成方法
    (k8s の場合)
    14

    View full-size slide

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

    View full-size slide

  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)

    View full-size slide

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

    View full-size slide

  18. コンテナ内の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

    View full-size slide

  19. 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

    View full-size slide

  20. Cryostatをインストール
    21

    View full-size slide

  21. Cryostatをインストール
    22

    View full-size slide

  22. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. CryostatのWeb UI
    26
    JFRを開始

    View full-size slide

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

    View full-size slide

  27. 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"
    }
    }
    } ]

    View full-size slide

  28. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. 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

    View full-size slide