前言:
公司項目是使用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 即可!
說明:部分圖片引用的是參考的鏈接上的!
參考鏈接: