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的主要内容,如果未能解决你的问题,请参考以下文章