通過SSH通道使用jvisualvm連接阿里雲NAT後的ECS上的JVM--更新2

前言:

公司項目是使用SpringBoot的方式,運行在阿里雲的ECS服務器上,但是阿里雲的是採用NAT與內網虛擬機建立映射的(諮詢阿里運維人員得知的),

導致的結果就是,jvisualvm客戶端連接不上服務器上的JVM,同樣的配置局域網可行到阿里雲上不可行!

 

本文主要講方式三和方式四

解決方式:

方式一:向阿里雲申請經典型網絡,虛擬主機直接綁定公網的IP地址,可以解決,但是一些其他的阿里服務可能享受不到;

方式二:在服務器上搭建VPN服務,客戶端通過VPN來連接;

----這是方式我按照運維人員提供的鏈接沒有測試成功,就算成功也耗費服務器的性能和資源。

方式三:利用SSH的通道實現, 

缺點1.不能同時監控多個應用;

缺點2.Visualvm是可以使用jmx遠程監控JVM實例,但是不能使用Profiler(性能分析)功能。所以方式四最好

方式四:配置Xterm轉發即可,執行是服務器上自己的程序 ,在客戶端顯示並操作!

 

方式三:

原理:利用SSH隧道來建立本地與NAT後的服務器的JVM進行連接,JMX方式的連接。

PS:

jstatd的方式:因爲localhost默認爲本地,就算指定端口也不行,結論jstatd連接是不通的!

1. JAVA應用啓動:

JMX的唯一缺點是你需要使用一些屬性啓動JVM。因此,請確保將以下參數添加到jvm,然後重新啓動應用程序。

yourJavaCommand... -Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.port=9010

-Dcom.sun.management.jmxremote.rmi.port=9011

-Djava.rmi.server.hostname=localhost

-Dcom.sun.management.jmxremote.host=localhost 

-Dcom.sun.management.jmxremote.local.only=true

例如:服務器上啓動項目!

nohup java -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.rmi.port=9011 -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.host=localhost -Dcom.sun.management.jmxremote.local.only=true -jar sorter-eureka-server-1.0-SNAPSHOT.jar > /dev/null 2>&1 &

PS:似乎同樣的端口不能同時啓動兩個應用!

 

2. 建立SSH TUNNEL

創建SSH通道,在本地執行:

ssh -CNf -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011

-i :身份文件

-N:不執行何指令

-f:後臺執行

-R:建立reverse tunnel

-C 數據壓縮;

生成自己的私鑰文件:

dbdu@dbdu:~$ openssl

OpenSSL> genrsa -out dbdu_rsa_private_key.pem 1024

生成.pem文件,參考:https://www.jianshu.com/p/7575f7976dad

例如:

dbdu@dbdu:~$ ssh -i dbdu_rsa_private_key.pem -l root www.xxxx.com -L 9010:localhost:9010 -L 9011:localhost:9011

dbdu@dbdu:~$ ssh -CNf -i dbdu_rsa_private_key.pem -l root www.yyyy.cn -L 9010:localhost:9010 -L 9011:localhost:9011

 

3. JVisualVM

  • 打開VisualVM應用程序,在左側空白處,右鍵【添加JMX連接】:

添加的界面:

連上的效果:

 

 

使用sock代理的方式:----暫時沒有時間去研究

dbdu@dbdu:~$ ssh -v -D 9696 root@www.chinaamd.cn

 

參考地址:

http://issamben.com/how-to-monitor-remote-jvm-over-ssh/

https://blog.csdn.net/DViewer/article/details/52774446

https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/jmx_connections.html

 

方式四:

一、CentOS7上服務器配置:

1 服務器端安裝xterm作爲測試

yum install xterm

2 服務器端安裝xauth程序,sshd需要這個程序執行X11轉發

yum install xauth

3 服務器端編輯/etc/ssh/sshd_conf文件,激活X11轉發。

X11Forwarding yes

重啓sshd。

4 在客戶端驗證服務器端轉發成功

如果有登錄到服務器請退出來,重新登錄

此時登陸sshd後,會在用戶家目錄下生成.XAuthority文件。

echo $DISPLAY

顯示結果:localhost:10.0,說明服務器端配置成功,否則如果爲空,則配置有錯。

 

二、Linux端--客戶端:以deepin15.7爲例

用深度終端登錄到服務器,然後在終端執行:xterm

[root@iZ2ze645sbZ ~]# echo $DISPLAY

localhost:10.0

[root@iZ2ze645sbZ ~]# xterm

大約10幾秒種會打開如下界面的新窗口:

在新的窗口中,執行jvisualvm命令:------也可以直接在深度終端裏執行 !!

此時就會打開服務器上的程序在本地顯示:----此時在深度終端看到中文的是亂碼或不可見

如果軟件界面有異常或者有中文,可能需要在服務器上安裝字體:

[root@iZ2zesbZ ~]# yum groupinstall "fonts"

以及配置中文環境:https://www.cnblogs.com/kingleoric/p/7517753.html

 

三、Windows端--客戶端:

SSH登陸遠程Linux服務器是普遍的方式,下面講述如何使用Putty,Xming工具在Windows機器上SSH登陸到Linux服務器,並運行VisualVM可視化界面程序,進行Java性能分析。

Step 1: 配置Linux服務器上sshd_config文件, 允許X11轉發

使用編輯工具打開/etc/ssh/sshd_config,並加上如下語句:

X11Forwarding yes

很多sshd_config默認會有X11Forwarding語句,但是被註釋掉了。如#X11Forwarding no, 這樣你只需要將註釋去掉,並將no改成yes。

Step 2: 在Windows客戶端安裝Xming

可以從http://sourceforge.net/projects/xming/下載Xming的安裝包Xming-6-9-0-31-setup.exe(安裝包的名稱隨着版本的升級,可能會有變化)

雙擊安裝包進行安裝的Welcome頁面

點擊Welcome頁面的Next按鈕,進入Select Destination Location頁面

選擇安裝位置後,點擊Next按鈕,進入Select Components頁面

在這個頁面中可以選擇需要安裝的組件。

Xming binary: Xming核心的程序,這個是必須的。

       Non US Keyboard support: 非US Keyboard 支持 。

       XLaunch wizard –frontend for Xming: XLauch嚮導,用來配置Xming,這是一個很方便的工具,可以生成xLaunch文件,建議安裝。

       Run utility – start programs with hidden console window: 運行工具,使用隱藏的控制窗口運行程序。

       還有關於Putty的三個單選, 可以選擇安裝Xming自帶的PuTTY程序。

            Normal PuTTYLink SSH Client

            Portable PuTTY Link SSH client

            Don’t need an SSH Client

或者直接選擇Full Installation(不熟悉的朋友可以在第一次使用的時候選擇Full Installation),選擇所有的組件,點擊下一步進入Select Start Menu Folder界面。

設置好開始目錄文件夾後,一般默認就可以。點擊下一步進入Select Additional Tasks界面。

設置快捷方式,以及關聯.xlaunch文件任務,一般默認就可以。點擊下一個進入Ready to Install界面。

在這個界面,可以回顧一下安裝設置,如果沒有問題就點擊Install按鈕,開始安裝。

Step 3: 配置Xming

從開始菜單中啓動安裝的XLaunch程序,進入Select display settings界面 。

在這個界面可以配置顯示窗口的方式,以及設置Display number,默認的Display number是0。完成後點擊下一步按鈕,進入Select how to start Xming界面。

可用的選型有兩個 

       Start no client: 僅啓動Xming, 不啓動客戶端程序(SSH客戶端,如Putty)

       Start a program:  啓動Xming和客戶端程序(Xming安裝可以選擇安裝自帶的Putty程序)

這裏我選擇的是Start no client, 隨後再啓動我自己單獨安裝的Putty程序。點擊下一步進入Specify parameter settings界面。

保持默認設置,點擊下一步進行Configuration complete界面。

點擊完成,啓動Xming Server。

Step 4: 在Windows客戶端安裝Putty

http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe下載最新的Putty程序。這個是免安裝的,直接雙擊運行即可。

Step 5: 配置Putty, 並連接遠程Linux系統

雙擊putty程序,打開Putty Configuration界面

在Session界面中,填上Host Name和Port。然後選擇Connection->SSH->X11界面。

在Connection->SSH->X11界面上選上Enable X11 Forwarding, 並填寫X display location。

因爲我的Xming就運行在本機, 並且剛纔在Xming中設置的Display number爲0, 所以X display location設置爲localhost:0。設置完成後點擊Open打開SSH Sesssion。

Step 6: 運行遠程Linux服務器上的VisualVM

在SSH Session窗口中,輸入打開VisualVM命令(前提是需要安裝VisualVM, 在jdk 6 update 7及以上版本中會帶有VisualVM, 當然也可以http://visualvm.java.net/download.html下載單獨的VisualVM程序)

就可以看到VisualVM界面在Windows客戶端出現,現在就可以使用它進行Java性能分析了。

 

可能出現的問題:

jvisualvm 不能啓動,即執行後沒有任何反應

jvisualvm -J-Dnetbeans.logger.console=true //查看啓動的異常信息:

java.lang.UnsatisfiedLinkError: /usr/local/java/jdk1.8.0_181/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: 無法打開共享對象文件: 沒有那個文件或目錄

服務器上安裝:

yum install libXtst 即可!

 

說明:部分圖片引用的是參考的鏈接上的!

參考鏈接:

https://blog.csdn.net/jeff_fangji/article/details/40070785

https://blog.csdn.net/smstong/article/details/46328247

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章