前言:
公司项目是使用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 即可!
说明:部分图片引用的是参考的链接上的!
参考链接: