为什么VisualVm不显示正在运行的tomcat中的所有线程?

时间:2011-07-25 08:49:59

标签: java tomcat profiler visualvm

我的tomcat(版本:5.5.25)运行一个应用程序,我尝试使用VisualVM (版本:1.3.2)进行分析。 一切看起来都不错,但并非所有的类和方法都在visualVM中显示。缺少的那些在线程[main]中运行。我知道这是因为如果我遇到断点,这就是我收到的线程名称。在主要外部运行的类[worker1],[worker2],......显示正确。

知道原因可能是什么?或者我可以尝试什么?

由于我运行的应用程序(称为Assentis Docbase)是闭源的,因此它们可能已经自定义了默认的tomcat配置。但是他们允许我用我自己的类扩展框架,这就是我想要描述的那些。

VisualVM我使用下载的默认配置运行。

4 个答案:

答案 0 :(得分:8)

您可能需要自定义分析根方法。请参阅Profiling With VisualVM, Part 1Profiling With VisualVM, Part 2。您还可以使用“Sampler”选项卡来获得Tomcat正在做什么的高级图片。

答案 1 :(得分:2)

以下是您可能无法看到“主要”主题的几个原因:

  • 该主题可能已退出。

  • 线程可以通过调用Thread.setName()更改其名称。

如果你想弄清楚真正的原因,你可能需要查看Tomcat源代码。


This page告诉您设置的位置。谷歌是你的朋友。

答案 2 :(得分:2)

VisualVM没有在线程[main]中显示我的方法调用的原因是VisualVM只允许同时配置多达32个线程。不可能允许观看更多线程。这已记录在Profiling With VisualVM, Part 2,“与NetBeans Profiler的比较”部分中,他们说:

“Profiled threads limit总是32。”

: - (

答案 3 :(得分:0)

您可能配置错误"从课程开始分析"在插件配置中。

假设您已配置org.acme.competition.*(A)进行性能分析:

VisualVM Startup config dialog

但是您使用命令意外地分析了班级org.acme.reference.ReferenceImpl(B):

$ cat source.txt | java -Xverify:none \
    -agentpath:/usr/share/visualvm/profiler/lib/deployed/jdk16/linux-amd64/libprofilerinterface.so=/usr/share/visualvm/profiler/lib,5140 \
    -cp bin/ org.acme.reference.ReferenceImpl

然后这将是错误的结果:

Wrong result

配置VisualVM的启动插件配置"从类开始分析"改为org.acme.reference.*,结果是正确的:

Correct result

也请参阅Startup profiler guide