【AWS】【JMX】 AWS/EC2(Linux:No GUI)上のJConsoleを、GUIで遠隔起動するには...

■ やりたい事

 AWS/EC2/Linux(No GUI)上のJConsole(以下「環境」の「AWS」)を、
 ローカル上の仮想環境(VMware)のOS(GUI)から、遠隔起動する。

# これを応用すれば、JConsoleだけでなく、JMeter等にも利用できそう

環境

AWS
 * OS   : CentOS7(CUIのみ)
 * Java : Java v1.8
ローカル上の仮想環境(VMware
 * OS   : CentOS7(GUI)
 * Java : Java v1.8

■ 解決案

https://blogs.yahoo.co.jp/dk521123/37291685.html
でやったsshコマンドのオプション「-X」をつける
ユーザ名「centos」。鍵「public-key-pair.pem」ホスト名「ec2-203-0-113-25.compute-1.amazonaws.com」の場合
# 文字化け対策
export LANG=en_US

# ssh接続
sudo ssh -X -l centos -i /home/user/.ssh/public-key-pair.pem ec2-203-0-113-25.compute-1.amazonaws.com jconsole

■ トラブル

 * 上記のコマンドを行う上でいくつかトラブルがあったので、その解決策をまとめる
 * 結論を言うと、以下をインストールする必要がある

sudo yum install xauth
sudo yum install libXrender.x86_64
sudo yum install libXtst.x86_64

【1】エラー「x11 forwarding request failed on channel 0」が返ってくる

 * 上記のコマンドを実行したら、エラー「x11 forwarding request failed on channel 0」が
   返ってきて、JConsoleが起動しない
解決策
 * 以下をインストールする

sudo yum install xauth
参考文献
https://qiita.com/mohi_teak/items/473fda1f03cbd9cc8518

【2】「libXrender.so.1」がないという旨の例外「UnsatisfiedLinkError」が発生する

 * 上記の『【1】エラー「x11 forwarding request failed on channel 0」が返ってくる』を行い
   sshコマンドを実行したら、以下「エラー内容」のように
  「libXrender.so.1」がないという旨の例外「UnsatisfiedLinkError」が発生する
エラー内容
[日本語]
Exception in thread "main" java.lang.UnsatisfiedLinkError: /[JDK Path]/libawt_xawt.so: libXrender.so.1: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません

[英語]
Exception in thread "main" java.lang.UnsatisfiedLinkError: /[JDK Path]/libawt_xawt.so: libXrender.so.1: cannot open shared object file: No such file or director
解決策
 * 以下をインストールする

sudo yum install libXrender.x86_64
sudo yum install libXtst.x86_64
参考文献
https://stackoverflow.com/questions/29741518/centos-error-libxext-so-6-cannot-open-shared-object-file-no-such-file-or-dir
# sudo yum install libXext.x86_64 は既にインストールされており、不要だった

【3】JConsoleのGUI表示が文字化けしている

 * 上記の『【2】「libXrender.so.1」がないという旨の例外「UnsatisfiedLinkError」が発生するる』を行い
   sshコマンドを実行したら、GUIでJConsoleが遠隔起動したが、文字化けを起こしている
  => 文字化けじゃ訳が分からないので、英語でいいから起動したい
解決策
sshコマンドを実行する前に「export LANG=en_US」を実行し
英語表示にする

# 恐らく、日本語表示にする方法もあると思うが、時間がないし、そんな難しい英語じゃないので...

関連記事

Linux】【コマンド】 ssh コマンド / scp コマンド

https://blogs.yahoo.co.jp/dk521123/37291685.html

JMX】 JConsole

https://blogs.yahoo.co.jp/dk521123/37307183.html

Tomcat】【JMXTomcat を JConsoleで、パフォーマンス監視する

https://blogs.yahoo.co.jp/dk521123/37307119.html