我们是一家编写大量 Java 代码的软件公司。我们的大多数 Java 应用服务器都是托管在远程数据中心的 CentOS 机器。
每当我们需要进入这些机器并进行筛选时,我们都会使用 PuTTY。
最近有人要求我使用jvisualvm
内存分析器来监控我们的 JVM,这是一个功能丰富的 GUI 工具,使用了大量色彩鲜艳的图形和图表。当我问我的技术主管如何通过基于字符的命令工具(如 PuTTY)来查看这样的 GUI 工具时,他告诉我应该使用名为 Reflection X 的工具。
这促使我阅读有关 Reflection X 和 X Windows 的一般知识(我从未接触过)。
我现在明白了“X”是一个硬件抽象层,因此您可以编写面向 GUI 的代码并将其部署在任何可以运行 X 的硬件上。这样一来,它(在主题上)与 Java 虚拟机完全相同。
我是什么不是理解的是我的 Windows PC、Reflection X、运行我要分析的应用程序的 CentOS 机器以及jvisualvm
工具本身之间的关系:谁在做什么?
Reflection X 是否在我的计算机上运行,还是安装在 Linux 服务器上?Reflection X 有什么功能可以让我进行jvisualvm
远程查看?
提前致谢!
答案1
jvisualvm 程序主要运行在您的 CentOS 机器上。在此机器上,运行着 X Server Host,而 Reflection X 只是一个 X Server 客户端。这意味着您实际上是在运行一个远程控制桌面。您的 Windows 机器使用 Reflection X 所做的一切就是连接到 CentOS 机器,以便您查看并与之交互运行的应用程序。
答案2
X 与 Java 非常不同。它不是虚拟机、硬件抽象层或类似的东西——它是一个网络协议,目前为 X11 版本,程序使用它与 X11 服务器进行通信。只要具有所需的功能,几乎任何语言都可以编写此类程序。
这X11 服务器通常在您自己的机器上运行,并执行在屏幕上显示图形并将键盘和鼠标事件发送回程序的任务。程序(X11 客户端)使用此类 IPC 方法(Unix 套接字)在本地连接到它,或通过网络连接到它 - 使用直接 TCP/IP(罕见)或在 SSH 连接内建立隧道(PuTTY 中的“X11 转发”选项)。
反射 X是 Windows 的商业 X11 服务器。开源替代方案包括Cygwin/X(Xorg 的一个移植版本),以及西明. 几乎每台 Linux 或 BSD PC 都运行韓國作为其主要图形系统。
当您在计算机上运行 Reflection X 时,它只是在那里等待连接。当您jvisualvm
在 CentOS 机器上运行时,分析器会连接到 X11 服务器(通过与 PuTTY 使用的相同 SSH 连接进行隧道传输),并使用 X11 协议打开一个窗口并在其中进行绘制。
答案3
- Reflection X 似乎是在 MS Windows 下运行的 X-Server。一个免费的替代方案是西明
- X-Server 处理 GUI 客户端请求,并将其显示在运行 X-Server 的主机上
- 在 Linux 机器上,一旦 X-Server 在 Windows 机器上启动并运行,您需要将 DISPLAY 设置为指向它。然后,您可以从 Linux 服务器中启动 GUI 应用程序,它将显示在您的 Windows 桌面上。
漂亮吧?
或者,如果 Linux 机器是 VMware VM,您可以安装 VMware 工具并使用其统一应用程序执行类似操作。