使用VisualVM对Tomcat应用程序进行性能分析

use*_*220 5 java tomcat profiling jvisualvm

我试图在用户名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)
...
Run Code Online (Sandbox Code Playgroud)

Chr*_*ltz 5

如果运行应用程序的计算机是远程的(例如服务器),那么您无需做一些工作就无法运行 GUI 应用程序。启用远程访问可能会更容易VisualVM

您可以使用两种技术来连接到远程 JVM:使用jstatd或使用 JMX。我不确定您认为使用 JMX 会失去什么,但显然它jstatd不允许您访问分析工具、CPU 监视器等)。

您需要配置 JVM 和 Tomcat 以允许远程访问。这需要 3 个步骤:

  1. 启用远程 JMX。事实证明,有一个指南

  2. 修复用于 RMI 的“徘徊端口”。也有一个指南

  3. (可选)安排对服务器的安全远程访问。最简单的方法是使用ssh -Lport:localhost:port一系列-L参数将多个端口从工作站转发到服务器。映射您必须在步骤 #1 和 #2 中配置的所有端口。如果您不这样做,您将需要对所有上述端口进行非防火墙访问。

  4. 重新启动 JVM 并连接 JVisualVM。

更新2022-06-01

请注意,“徘徊端口”问题已在 JVM 级别得到修复,因此不需要应用程序(即 Tomcat)对此支持。Tomcat 8.5 及更高版本的项目 #1包含更新的说明,使得项目 #2 对于最新的 JVM 来说不再需要。


vsm*_*kov 4

不幸的是,远程模式下只能进行采样,因此JMX缺乏仪器工具。

visualvm实际上,您在用户下运行的方法tomcat6是正确的。您应该看一下有关如何在 sudo 下运行应用程序的问题X11

DISPLAY传递环境变量的最简单方法XAUTHORITY是使用sudo -E命令来保留当前用户环境。

tomcat6另外,如果您在用户下看不到您的进程,您应该检查 是否CATALINA_TMPDIR指向/tmp。否则你应该将它传递给 VisualVM

jvisualvm -J-Djava.io.tmpdir="${CATALINA_TMPDIR}"
Run Code Online (Sandbox Code Playgroud)

实际上有很多替代品,例如yourkitjprofiler附带的 java 代理,它们允许远程仪器分析。