2
0

More than 5 years have passed since last update.

GKE+Java環境におけるjvisualvmの利用方法

Last updated at Posted at 2018-07-16

はじめに

Google Kubernetes Engine + Java (Spring Boot)環境における、jvisualvmの利用方法について試したことを記載しています。

環境

  +--------+      +-------------------------+     +-----------------------+
  |        |      |                         |     |                       |
  |   PC   | +--> |   GCE: tunnel serever   | +-> |   GKE: applications   |
  |        |      |                         |     |                       |
  +--------+      +-------------------------+     +-----------------------+
  • PC:GCEにssh接続可能なマシン。PCにてjconsole,jvisualvmを実行する。
  • tunnel serverは、GKEと同一ネットワーク(通信可能なネットワーク)に存在する適当なインスタンス。Cent OS 7。
  • GKE:applicationsは、openjdk:8u171-jre-alpine ベースのcontainerイメージを利用している。
    ※コンテナ内に、jps,jconsoleコマンドが存在しない。

この前提となるSpring Bootアプリケーションは、、https://github.com/h-r-k-matsumoto/spring-boot-sample となります。jibを使ってdockerイメージまで作成しちゃっています。
細かい設定などは、上記アプリケーションのpom.xml、kubernetsの設定を参照してください。

事前準備

java起動時オプションの設定

jmxのリモート接続を許可するように設定する必要があります。
起動時オプションとして下記を設定します。

-Dcom.sun.management.jmxremote.port=7199
-Dcom.sun.management.jmxremote.rmi.port=7199
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

※jibを使う場合は
 https://github.com/h-r-k-matsumoto/spring-boot-k8s-jib/blob/master/pom.xml#L67-L70
を参考にしてください。

podのIP確認

podのipを確認しておく必要があります。
kubectl get pod -o wide コマンドにて各podのipを確認しておきます。

$ kubectl get pod -o wide
NAME                                  READY     STATUS    RESTARTS   AGE       IP          NODE
spring-boot-sample-7d4448cf7b-9nh8v   1/1       Running   0          29m       10.36.2.8   gke-cluster-example-default-pool-26c288d4-vn4x
spring-boot-sample-7d4448cf7b-czqpj   1/1       Running   0          29m       10.36.1.5   gke-cluster-example-default-pool-26c288d4-mcdh
$

以降に記載する手順は、監視対象のアプリケーションのIPとして 10.36.2.8 として記載しています。

ツールの利用

sshでトンネル接続

下記コマンドにて、PCとtunnel serverの接続を行います。
-- の前のコマンド部分は、Google Cloud Consoleにて[Compute Engine]→[VMインスタンス]→[SSH]→[gcloudコマンドを表示]からコピペすればOKです。
-- の後ろのコマンドは、通常のsshコマンドのオプションです。7199に対する動的ポート転送となります。

$ gcloud compute --project xxxxx ssh --zone xxxxx "tunnnel-server"  -- -N -D 7199

jvisualvmでの接続

  1. 下記コマンドでjvisualvmを起動します。
    $ jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7199 -J-DsocksNonProxyHosts=

  2. [リモートホストを追加]をクリックします。 jvisualvm01

  3. podのIP確認 で確認したIPを入力します。

  4. [JMX接続を追加]をクリックします。 jvisualvm02

  5. 接続として、 10.36.2.8:7199 を入力します。これ以外はデフォルトのままで大丈夫です。

  6. [開く]をクリックします。 jvisualvm03

  7. これで接続環境です。CPUプロファイリングなども問題なく利用できます。 jvisualvm04

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0