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

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

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

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

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

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

提前感谢您的建议和问候

帕斯卡

【问题讨论】:

    标签: java glassfish visualvm proxy-classes


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这确实有帮助!线程转储显示我的一个安全授权器(Seam 框架)在每次授权检查时直接访问数据库,而不是使用缓存的 bean。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多