1,需求场景
我的linux服务器上跑了好几个java应用,现在想监控这些应用的详细情况,方便优化jvm性能。zabbix这些监控软件就不说了,主要是用jdk自带了一款监控软件,叫做visualVM,但是visualVM是一款图形界面工具,而我的centos上没有安装图形界面,所以不能运行该工具。可能你会说使用visualVM的远程监控,对,可以使用远程监控,但是很不方便,使用jstatd功能太弱,使用jmx需要重启我的应用,所以我不想这么干。
现在有没有这样一种方法,在没有图形界面的linux上运行jvisualvm,然后把jvisualvm图像发送到我的本地电脑上显示
2.解决步骤
在没有图形界面的centos上运行visualVM,就会收到如下报错:
# /usr/java/jdk1.8.0_112/bin/jvisualvm
/usr/java/jdk1.8.0_112/lib/visualvm/platform/lib/nbexec: WARNING: environment variable DISPLAY is not set
工具:
1.XQuartz
Mac下载安装XQuartz
https://www.xquartz.org/
2.登录到centos,修改/etc/ssh/sshd_config,打开如下几项
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
然后重启sshd服务
3,linux上安装一下一些组件:
yum install xorg-x11-xauth xterm libXi libXp libXtst -y
到这里基本就完了,然后在mac本地打开终端,连接到centos上
ssh -XY username@hostname
然后在此运行# /usr/java/jdk1.8.0_112/bin/jvisualvm,该软件的图像即会发送到我的mac上来显示了,就像mac本地使用该工具一样
一些报错解决方法:
1.
X11 connection rejected because of wrong authentication
出现上面的报错查看用户家目录下有没有.Xauthority这个文件,正常情况下使用的,如果没有,可能是登录到linux系统后切换了用户了,在原来用户的家目录找找
2.
打开图形界面工具既不报错也不显示打开应用
该问题原因也不是很清楚,不过可以尝试打开XQuartz,在XQuartz右键--应用程序--终端,执行
xhost + 远程主机ip
执行完显示being added to access control list,表示成功添加访问权限
或者在远程主机上设置DISPLAY环境
export DISPLAY=localhost:0(localhost:0不一定适用于任何主机)
正常情况登录到主机上会自动设置好这个变量。
参考这篇文章:http://blog.creke.net/810.html
如果不能通过这种方法实现X11转发,可以通过一下方案来实现
centos通过vnc查看X11图形窗口:http://blog.creke.net/811.html