我的 Java 应用程序中 Jar 文件访问的高争用

问题描述

我们开发基于 JMS 的应用程序,该应用程序从 JMS 队列接收 XML 格式的消息。 该应用程序部署在 Weblogic 服务器 (12c) 上。

在大约 400-500 条消息/秒的情况下,我们遇到了性能不佳的问题,并在 JMS 队列上积压了积压。

我尝试使用 Java Mission Control 分析应用程序,在记录了系统的一分钟活动后,我发现在 Zip (Jar) 文件的访问阶段存在很多争用Weblogic 类加载器。

当检测到争用时,我的 JMS MDB 执行的操作是使用 JAXB 对 XML 文件内容进行解组。

任何可能导致问题的提示

解决方法

一种可能性是您正在重复调用 JAXP 工厂方法(如 XMLParserFactory.getInstance()),这涉及搜索类路径和检查 JAR 文件。这些方法旨在仅在应用程序初始化时调用一次。 (除了重用工厂,重用 XML 解析器本身也是有益的 - 无论如何,曾经是这种情况。)