我正在尝试在用户名 tomcat6 下运行 visualvm,因为显然 visualvm 只能找到在其用户名下运行的应用程序。所以默认情况下它只查找以我的用户名运行的应用程序。我已经能够通过 jmx 将 visualvm 与 tomcat6 连接起来,但这缺乏检测分析的精细粒度。
我尝试了以下操作以用户名 tomcat6 运行 visualvm,但出现了以下我不理解的错误。
$ sudo -u tomcat6 jvisualvm
No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':0' 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:115)
...
最佳答案
如果运行您的应用程序的计算机是远程的(例如服务器),那么您需要做一些工作才能运行 GUI 应用程序。启用对 VisualVM
的远程访问可能会更容易。
您可以使用两种技术连接到远程 JVM:使用 jstatd
或使用 JMX。我不确定您认为使用 JMX 会损失什么,但显然 jstatd
不允许您访问分析工具、CPU 监视器等)。
您需要配置 JVM 和 Tomcat 以允许远程访问。这需要 3 个步骤:
启用远程 JMX。原来,there's a guide for that .
修复用于 RMI 的“漫游端口”。有一个 guide for that ,也是。
(可选)安排对服务器的安全远程访问。最简单的方法是使用带有一系列
-L
参数的ssh -Lport:localhost:port
将多个端口从您的工作站转发到您的服务器。映射您在步骤#1 和#2 中必须配置的所有端口。如果您不这样做,您将需要对上述所有端口具有非防火墙访问权限。重新启动 JVM 并连接 JVisualVM。
更新 2022-06-01
请注意,“漫游端口”问题已在 JVM 级别修复,因此不需要应用程序(即 Tomcat)支持它。 Item #1 for Tomcat 8.5之后包含更新的说明,使项目 #2 对于最近的 JVM 变得不必要。
关于java - 使用 VisualVM 分析 tomcat 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028824/