【问题标题】:Why does VisualVm does not show all threads in a running tomcat?为什么 VisualVm 不显示正在运行的 tomcat 中的所有线程?
【发布时间】:2011-07-25 08:49:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你确定他们没有重命名主线程吗?
  • 我对分析 tomcat 有点陌生。如何查看?

标签: java tomcat profiler visualvm


【解决方案1】:

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

【讨论】:

  • 就是这样!如果您将 root 方法设置为较高级别,则需要在点后添加两个 *(星号)。例如“我的包裹。**”
【解决方案2】:

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

  • 线程可能已经退出。

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

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


This page 告诉你设置在哪里。 Google 是您的朋友。

【讨论】:

  • 但是如果我在调用方法之前开始分析并在调用方法之后停止,那么应该调用主线程并且必须在分析器中输入一个条目?不是吗?
  • 好像有个设置叫“限制分析线程数”。所以我的主线程没有被分析,因为它是例如线程号 33。但我知道如何/在哪里设置它。有什么想法吗?
  • @Stephen 我已经找到了相同的链接,但它只描述了如果您使用 VisualVM 的 eclipse-plugin 时如何使用这些设置。
【解决方案3】:

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

“分析线程限制始终为 32。”

:-(

【讨论】:

  • 我认为这对您的情况无效。你设置了根方法吗?
  • 我用我的方法所在的顶级包名称添加到“从类开始分析”。但它没有被调用。我认为线程限制确实是原因,因为 Aseentis Docbase 创建了很多新线程。之所以需要它们,是因为它用于批量处理大文件以进行输出管理。
  • 现在我用根方法得到了它。它是“mypackage.**”,我忘记了一个 。所以“mypackage.”不起作用。我现在很开心!
  • 好的,很高兴它对你有用。是的,“我的包裹”。不起作用。 “从类开始分析”文本区域中有一个工具提示,它告诉您正确的语法。 blogs.oracle.com/nbprofiler/entry/… 帖子也提到了正确的语法。
【解决方案4】:

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

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

但您不小心使用以下命令分析了 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

那么这将是错误的结果:

当用org.acme.reference.*配置VisualVM的启动插件配置“Start profiling from classes”时,结果是正确的:

也可以查看Startup profiler guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多