java.lang.InternalError:无法连接到X11窗口服务器JVisualVM分析会话

2019-10-20 07:03发布

我有一个Ubuntu的服务器虚拟机( myapp01 ),并有一个Java应用程序部署在那里。 该应用程序一直充当靠不住的,我想用JVisualVM来分析它。 要做到这一点,我需要我的Windows 7主机上安装X-Windows,然后得到了Ubuntu VM出口其X11连接到我的主机,当我告诉它在虚拟机上运行JVisualVM。

于是我开始点击这里下载Xming的:

http://sourceforge.net/projects/xming/files/Xming/6.9.0.31/Xming-6-9-0-31-setup.exe/download

我使用的所有默认/推荐的安装选项,包括使用普通PuTTY会话,并允许公共和专用网络接入。 安装的Xming后,我发起并证实这是在我的Windows主机上运行。 然后我打开了Cygwin和SSHed到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

我则显示输出到这似乎是我的主机的IP:

myuser@myapp01:~$ export DISPLAY=10.10.101.96

然后我尝试运行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

内部/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)

想法? 我VPNed中,这可能会影响什么? 难道我的Xming不知何故错误地配置? 是我export DISPLAY命令错了吗?

Answer 1:

为了安全起见,X服务器一般不会接受来自其他主机直接TCP连接。 否则,人们可能键盘记录器连接到你的X服务器,你的击键将通过网络传递的加密,使人们只是被同一LAN上记录下密码。

但SSH提供了在你的SSH会话转发X11通信的安全方式,使用-X-Y选项。

在您的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-xauth RPM。

在远程计算机,如果一切顺利,那么$DISPLAY在远程机器上,将被设置到通过SSH设置代理显示:

$ echo $DISPLAY
localhost:10.0

此时你可以运行这样的命令xterm远程机器上,并有窗口弹出的本地显示器上。

虽然是在远程机器上没有运行X服务器,你可能还需要安装一堆X11库为Java,能够跟你的本地X服务器...



Answer 2:

如果安装了Windows主机上的JDK,也没有必要从通过的XWindow和SSH的Unix主机使用JVisualVM。 这是一个非常正确的解决方案,但如果你不使用ssh和XWindow的显示屏,不说话的cygwin或Xming的安装它可能会非常棘手...

在这种情况下,使用最简单的解决方法是:

  • 在Linux主机上运行jstatd(下应用程序调试的相同的凭据preferently)
  • 在Windows主机上运行jvisualvm,并要求它连接到Linux主机

(见约jvisualvm和jstatd进一步引用文档)



Answer 3:

我已经解决了类似的问题。 在我的情况下,没有在指定了不正确的IP地址/etc/hosts文件服务器正在运行的sshd的主机名。

幸运的Java应用程序给了我这个更详细的输出,而其他应用程序只是失败, Failed to open display的消息。



文章来源: java.lang.InternalError: Can't connect to X11 window server for JVisualVM profiling session