VisualVM 和 GlassFish

Posted

技术标签:

【中文标题】VisualVM 和 GlassFish【英文标题】:VisualVM and GlassFish 【发布时间】:2013-04-09 15:11:12 【问题描述】:

目前,我正在尝试清除我的 JSF/PrimeFaces Web 应用程序中的瓶颈。为此,我安装了 VisualVM 及其 GlassFish 插件。

我无法通过 JMX 显式“分析”,但可以生成“采样”输出。但是,此输出显示了名为 $Proxy245.invoke() 的操作中的几乎全部负载。

我自己的操作 (ch.diction.*) 和 SQL 交互逻辑 (com.mysql.jdbc.*),我一开始怀疑是瓶颈,但似乎对这种缺乏性能。

正在显示的页面是一个 PrimeFaces 数据表,其中包含数百条分页记录。记录的数量确实会显着影响性能,如果不是完全影响的话。

所以我的问题是:我怎样才能找出 $Proxy245.invoke() 背后的原因,以便确定这种情况下的真正瓶颈?

提前感谢您的建议和问候

帕斯卡

【问题讨论】:

【参考方案1】:

$Proxy245 是一些AOP 框架在您的情况下生成的代理类,不清楚是哪一个。它用于拦截方法调用。由于它是生成的,因此您将找不到实际的来源,因为没有任何来源。我建议您使用 VisualVM(线程选项卡)生成一个线程转储并检查堆栈跟踪我很确定您会找到这种方法(可能不是第一次尝试,而是进行几次转储)。有了这个,你可以找到最后调用这个(代理)方法的方法链。

还尝试对应用程序进行分析,而不仅仅是 Sample(Profiler 选项卡)。使用分析器,您可以查明这些是对同一个方法的多次调用,还是只是一个不想结束的长时间调用。

【讨论】:

谢谢,这确实有帮助!线程转储显示我的一个安全授权器(Seam 框架)在每次授权检查时直接访问数据库,而不是使用缓存的 bean。

以上是关于VisualVM 和 GlassFish的主要内容,如果未能解决你的问题,请参考以下文章

VisualVM 和 GlassFish

利用VisualVM监视远程JVM

使用VisualVM分析性能

在 visualVM 中自动保存分析器快照

Java性能监控工具:VisualVM

Visual VM 垃圾回收性能监控开源插件, 支持Java 8和VisualVM 2.0