EC2 インスタンス上に存在する Web サーバーを VisualVM 接続してで見たいと思った際に、どのようにして見たらよいかをまとめておきます。
なお、ローカル環境が Mac OS X での場合です。
手順
- java の起動コマンドに引数をいくつか追加する。
- SOCKS プロトコルで EC2 インスタンスに接続できるようにしておく。
- VisualVM の起動時設定に↑を使用できるようなオプションを追加する。
- JMX 接続を使って、リモート接続を開始する。
1. java の起動コマンドに引数をいくつか追加する
今回はポート番号 3333
を JMX リモート接続用に開放しておき、そこに接続してもらうように設定します。下記の引数を追加し、アプリケーションを起動しておきます。
-Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
2. SOCKS プロトコルで EC2 インスタンスに接続できるようにしておく
下記コマンドを実行し、SOCKS プロトコル *1 を有効にします。
ssh -i {pem_file_path} -fND 10000 ec2-user@{ec2-private-ip}
{pem_file_path}
には、自身の PC に保存してある pem ファイルの居場所を指定します。たとえば、~/.ssh/visualvm_con.pem
などです。
{ec2-private-ip}
には、接続したい EC2 インスタンスのプライベート IP アドレスを入れておきます。
オプションについては、
-i
: 秘密鍵ファイルを指定します。-f
: バックグラウンド実行を意味します。-N
: リモートコマンドを実行しません。-D
: ローカルホスト側におけるアプリケーションの動的なポート伝送を指定します。
3. VisualVM の起動時設定に↑を使用できるようなオプションを追加する
起動時の設定に SOCKS プロトコルの設定を追加して、jvisualvm を実行します。
jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=10000 -J-DsocksNonProxyHosts=
あるいはGUI から設定する場合は、「File > Preferences > Network」の順に開き、下記の画像のように設定値を入力しておきます。 SOCS Proxy 向けの設定の箇所に、localhost
と 10000
を入れておきます。
4. JMX 接続を使って、リモート接続を開始する
「JMX 接続を追加」を押すと、追加用のダイアログが立ち上がるので、そこに先ほどの {ec2-private-ip}
と同じ IP アドレスとポートを書きます。ポートは JMX 用のポートのため、3333
を使用することに注意が必要です。
上記の状態にして、「了解」ボタンを押すと、EC2 上のサーバーとの接続が開始されます。接続に成功すると、いつも見る VisualVM の画面が立ち上がってくれるはずです。