通过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

猜你喜欢

转载自blog.csdn.net/dusuanyun/article/details/82886226