java.lang.InternalError : Can't connect to X11 window server for JVisualVM profiling session 错误

标签 java ubuntu jvisualvm x11

我有一个 Ubuntu 服务器虚拟机 (myapp01),并在那里部署了一个 Java 应用程序。该应用程序一直表现不稳定,我想使用 JVisualVM 对其进行分析。为此,我需要在我的 Windows 7 主机上安装 X-Windows,然后在我告诉它在 VM 上运行 JVisualVM 时让 Ubuntu VM 将其 X11 连接导出到我的主机。

所以我开始在这里下载 XMing:

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

我使用了所有默认/推荐的安装选项,包括使用普通的 PuTTy session 并允许公共(public)和专用网络访问。安装 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

然后我将显示导出到看起来是我主机的 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)

想法?我已加入 VPN,这会影响什么吗?我是否以某种方式错误配置了 XMing?我的 export DISPLAY 命令有误吗?

最佳答案

为了安全起见,X 服务器通常不会接受来自其他主机的直接 TCP 连接。否则,人们可以将键盘记录器连接到您的 X 服务器,并且您的击键将在未加密的情况下通过网络传递,从而允许人们仅通过在同一 LAN 上就可以记录密码。

但 SSH 提供了一种通过 SSH session 转发 X11 流量的安全方法,使用 -X-Y 选项。

在您的 Windows 计算机上,通过尝试从命令行打开 xterm 确保 $DISPLAY 设置正确。 $DISPLAY 可能会设置为 :0,代表 localhost:0。还有一些额外的 token 用于验证与 X 服务器的连接,这些 token 存储在 ~/.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 服务器,但您可能仍然需要安装一堆用于 Java 的 X11 库才能与本地 X 服务器通信......

关于java.lang.InternalError : Can't connect to X11 window server for JVisualVM profiling session 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153416/

相关文章:

java - 从新事件 [Android] 更改 TextView 的文本

java - 如何将 Spring Boot Web 应用程序连接到 postgresql 数据库

java - JMX 连接失败,返回 "handshake failed...expected JDWP-Handshake"

java - jvisualvm 的代理配置问题

ubuntu - 现在为 haskell vim 安装更新的 cabal 版本的问题

java - VisualVM:CPU/内存分析器卡在 "Connecting to the target JVM..."

java - 请确认/评论我在 EclEmma Eclipse 插件中看到的分支覆盖率问题

java - JHipster 错误 : Could not find or load main class org. apache.maven.wrapper.MavenWrapperMain

java - 替换字符串中的提及

ubuntu - 了解 Gitlab 中的所有 LDAP 用户