6

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

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

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

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

4

4 回答 4

8

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

于 2011-07-25T18:56:47.227 回答
2

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

  • 线程可能已经退出。

  • 线程可以通过调用Thread.setName().

如果您想找出真正的原因,您可能需要查看 Tomcat 源代码。


此页面告诉您设置在哪里。谷歌是你的朋友。

于 2011-07-25T09:50:27.300 回答
2

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

“配置线程限制始终为 32。”

:-(

于 2011-07-26T11:45:12.153 回答
0

您可能在插件配置中错误地配置了“从类开始分析”。

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

VisualVM 启动配置对话框

但是您不小心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

那么这将是错误的结果:

错误的结果

当配置 VisualVM 的启动插件配置“从类开始分析”时org.acme.reference.*,结果是正确的:

结果正确

请参阅启动分析器指南

于 2017-08-25T20:19:08.053 回答