11

我有一个在 Jetty 上运行的 wicket+spring+hibernate 应用程序。当我开始使用 VisualVM (jdk 1.7.0_9) 对其进行 CPU 分析时,它首先会因控制台打印而停止几分钟:

Profiler Agent: 250 classes cached.
Profiler Agent: 250 classes cached.

这些行重复了大约 20 次,然后 VisualVM 说它已经开始检测并检测了大约 8000 种方法。

现在,在此之后,我单击 Web 应用程序上的一个按钮,应用程序再次完全挂起几分钟,而控制台打印出如下行:

Profiler Agent: Redefining 100 classes at idx 100, out of total 336 

在此之后,我得到了分析结果,但它们几乎没有用,因为几乎 99.6% 的时间都花在了

sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()

这使得 VisualVM 完全无法使用。任何猜测可能是这里的罪魁祸首?

我正在运行 Jetty 8.1.2.v20120308

4

2 回答 2

14

我建议先从 CPU 采样开始。一旦您知道出了什么问题,您就可以切换到分析以获取详细信息。请务必阅读使用 VisualVM 进行分析,第 1 部分使用 VisualVM 进行分析,第 2 部分,以获取有关如何设置 Jetty 服务器的分析的更多信息。

于 2012-11-01T07:21:55.263 回答
7

答案是缩小检测类的范围。

单击分析器中的设置选项,然后查看“不分析类”或“仅分析类”。请务必排除您不想检查的第三方库。例如,我在我的应用程序中使用 Jython,而分析器试图检测数千个类,可能包括在运行时动态生成的类(不好)。

于 2013-03-12T02:07:22.677 回答