IAm*_*aja 1 java x11 ubuntu jvisualvm
我有一个Ubuntu服务器VM(myapp01)并在那里部署了一个Java应用程序.该应用程序一直表现得很糟糕,我想用JVisualVM来描述它.为此,我需要在我的Windows 7主机上安装X-Windows,然后让Ubuntu VM将其X11连接导出到我的主机,当我告诉它在VM上运行JVisualVM时.
所以我开始在这里下载XMing:
http://sourceforge.net/projects/xming/files/Xming/6.9.0.31/Xming-6-9-0-31-setup.exe/download
Run Code Online (Sandbox Code Playgroud)
我使用了所有默认/推荐的安装选项,包括使用普通的PuTTy会话并允许公共和专用网络访问.安装XMing后,我启动了它并验证它在我的Windows主机上运行.然后我打开了Cygwin并SSH连接到Ubuntu服务器:
$ ssh myuser@myapp01
myuser@myapp01's password:
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.5.0-23-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Tue Jun 10 21:26:15 EDT 2014
System load: 0.0 Processes: 82
Usage of /: 22.5% of 11.81GB Users logged in: 0
Memory usage: 30% IP address for eth0: 10.10.41.108
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
38 packages can be updated.
30 updates are security updates.
Last login: Tue Jun 10 15:03:35 2014 from 10.10.101.96
Run Code Online (Sandbox Code Playgroud)
然后我将显示导出到看起来像我主机的IP:
myuser@myapp01:~$ export DISPLAY=10.10.101.96
Run Code Online (Sandbox Code Playgroud)
然后我尝试运行JVisualVM:
myuser@myapp01:~$ cd $JAVA_HOME
myuser@myapp01:/usr/lib/jvm/java-7-oracle-amd64$ ls
bin COPYRIGHT db include jre lib LICENSE man README.html release src.zip THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt
myuser@myapp01:/usr/lib/jvm/java-7-oracle-amd64$ cd bin/
myuser@myapp01:/usr/lib/jvm/java-7-oracle-amd64/bin$ ./jvisualvm
Error: Can't connect to X11 window server using '10.10.101.96' as the value of the DISPLAY variable.
See the /home/myuser/.visualvm/7u14/var/log/messages.log for details.
myuser@myapp01:/usr/lib/jvm/java-7-oracle-amd64/bin$ vim /home/myuser/.visualvm/7u14/var/log/messages.log
Run Code Online (Sandbox Code Playgroud)
内部/home/myuser/.visualvm/7u14/var/log/messages.log:
java.lang.InternalError: Can't connect to X11 window server using '10.10.101.96' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:110)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81)
at org.netbeans.core.startup.Main.start(Main.java:200)
at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:84)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
想法?我是VPN,可能会影响到什么吗?我有没有错误配置XMing?我的export DISPLAY命令错了吗?
出于安全考虑,X服务器通常不接受来自其他主机的直接TCP连接.否则,人们可以将键盘记录器连接到您的X服务器,并且您的击键将通过未加密的网络传递,允许人们仅通过在同一LAN上记录密码.
但SSH使用-X或-Y选项提供了一种通过SSH会话转发X11流量的安全方法.
在Windows计算机上,$DISPLAY通过尝试xterm从命令行打开来确保设置正确.$DISPLAY可能会被设置为:0代表localhost:0.还有其他令牌用于验证与X服务器的连接,这些令牌存储在~/.Xauthority您可以查看的位置xauth list.
现在,跑ssh -Y 10.10.101.96.如果收到类似的消息X11 forwarding request failed on channel 0,则运行ssh -v -Y 10.10.101.96以获取调试消息.如果远程计算机是服务器,原因可能xauth是未安装.在CentOS上,它在xorg-x11-xauthRPM中.
在远程计算机上,如果一切顺利,那么$DISPLAY在远程计算机上现在将设置为SSH设置的代理显示:
$ echo $DISPLAY
localhost:10.0
Run Code Online (Sandbox Code Playgroud)
此时,您可以xterm在远程计算机上运行命令,并在本地显示屏上弹出窗口.
虽然远程计算机上没有运行X服务器,但您可能仍需要为Java安装一堆X11库才能与本地X服务器通信...