Java 为什么VisualVm不显示运行中tomcat中的所有线程?
我的tomcat(版本:5.5.25)运行一个应用程序,我尝试使用它(版本:1.3.2)分析它。 一切看起来都不错,但并非所有的类和方法都显示在visualVM中。它们是线程[main]中缺少的线程。我知道这一点,因为这是我在遇到断点时收到的线程名称。在main之外运行的类,例如[worker1]、[worker2]、。。。显示正确 你知道原因是什么吗?或者我能试试什么 因为我运行的应用程序(称为)是封闭源代码的,所以他们可能已经定制了默认的tomcat配置。但它们允许我用自己的类扩展框架,而这些类正是我想要分析的Java 为什么VisualVm不显示运行中tomcat中的所有线程?,java,tomcat,profiler,visualvm,Java,Tomcat,Profiler,Visualvm,我的tomcat(版本:5.5.25)运行一个应用程序,我尝试使用它(版本:1.3.2)分析它。 一切看起来都不错,但并非所有的类和方法都显示在visualVM中。它们是线程[main]中缺少的线程。我知道这一点,因为这是我在遇到断点时收到的线程名称。在main之外运行的类,例如[worker1]、[worker2]、。。。显示正确 你知道原因是什么吗?或者我能试试什么 因为我运行的应用程序(称为)是封闭源代码的,所以他们可能已经定制了默认的tomcat配置。但它们允许我用自己的类扩展框架,而这
VisualVM I以下载的默认配置运行 以下是您无法看到“主”线程的几个原因:
- 线程可能已退出
- 线程可以通过调用
更改其名称thread.setName()
告诉您设置的位置。谷歌是你的朋友。你可能需要定制评测根方法。见和。您还可以使用“Sampler”选项卡获取Tomcat正在做什么的高级图片。VisualVM没有在线程[main]中显示我的方法调用的原因是VisualVM只允许同时分析多达32个线程。不可能允许监视更多线程。这已在“与NetBeans分析器的比较”一节中记录,他们说: “分析线程限制始终为32。”
:-(您可能在插件配置中错误地配置了“从类开始评测” 假设您已为评测配置了
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的启动插件配置“从类开始评测”时,结果是正确的:
也请参见。您确定他们没有重命名主线程吗?我对分析tomcat有点陌生。如何检查它?但是如果我在调用方法之前开始分析,在调用方法之后停止分析,那么主线程应该被调用,并且必须在分析程序中生成一个条目?不是吗?似乎有一个sett称为“限制配置文件线程的数量”的ing。因此,我的主线程没有被分析,因为它是例如线程编号33。但我知道如何/在哪里设置它。有什么想法吗?@Stephen I alreday找到了相同的链接,但它只描述了如果您使用visualVM的eclipse插件,您可以如何使用设置。我认为这在您的情况下是无效的。您设置了根方法吗?我添加到了“从类开始分析”,使用我的方法所在的顶级包名。但它没有被调用。我认为线程限制确实是原因,因为Aseentis Docbase创建了许多新线程。它们是必需的,因为它用于批处理大文件以进行输出管理。现在我使用根方法获得了它。它是”mypackage.*“我忘了一个。所以“mypackage.”不起作用。我现在很高兴!好的,我很高兴它对您起作用。是的,“mypackage.”不起作用。“从类开始分析”中有一个工具提示“文本区,它告诉你正确的语法。这篇文章也提到了正确的语法。就是这样!如果你将root方法设置为高级别,你需要在点后添加两个*(星)。例如,“mypackage.*”