java - 使用 VisualVM 分析 tomcat 应用程序

标签 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)
...

最佳答案

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

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

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

  1. 启用远程 JMX。原来,there's a guide for that .

  2. 修复用于 RMI 的“漫游端口”。有一个 guide for that ,也是。

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

  4. 重新启动 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/

相关文章:

java - 从 Java.io.Reader 获取有意义的文本

java - 在循环中打印格式化数组值?

php - 如何使用 PHP 生成火焰图?

c - 前后增量运算符分析结果

java - Java 中 int 或 long 的 Math.signum(double) 的等效函数

JavaFX 和 getDesktop().open() 使程序崩溃

java - tomcat无法更新新编译的java文件

java - 如何配置Tomcat连接MySQL

tomcat - 在 Tomcat 中选择 Grails 环境

c++ - 使用 GCC : Get Call Count of Functions in a Shared Library 进行分析