有没有一种方法可以提高单体 websphere liberty 应用程序的性能?

Is there a way to improve performance with a monolithic websphere liberty application?

有什么重要的方法可以提高 websphere liberty 应用程序的性能。

该应用程序是一个整体,包含大约 40 个 Web 应用程序和一只耳朵。没有 REST Web 服务,只有 servlet 和 jsp 代码。

产品版本:19.0.0.3

大概有 30 万行 Java 代码。

加载请求可能需要 30-40 秒。

是运行Java8.

这些机器是开发机器,Mac Book Pro,达尔文内核版本 19.6.0。 16 GB 内存。

以下是一些功能:

<featureManager>
    <feature>appSecurity-2.0</feature>
    <feature>jaxrs-2.0</feature>
    <feature>jsp-2.3</feature>
    <feature>localConnector-1.0</feature>
    <feature>jaxws-2.2</feature>
    <feature>ldapRegistry-3.0</feature>
</featureManager>

WebSphere Liberty 本身应该是轻量级和快速的。所以你可能应该寻找像

这样的区域
  1. 分配给服务器的内存足够。
  2. 需要分析耗时 30-40 秒的用例,以了解处理的哪一部分耗时。它可能会在数据库中花费大量时间 由于查询性能不佳而处理。

您可以使用 jvisualvm 工具执行 cpu 和内存分析以了解热点。 对于更丰富的性能相关数据,您还可以使用开源 javamelody,它可以很容易地与任何 EE 应用程序和 EE 服务器集成

您可以查看 IBM WebSphere Application Server 性能指南。一些技巧对于传统的 WebSphere 和 Liberty 都是通用的,而另一些则是不同产品所独有的。有一个Liberty section.

与提到的其他答案一样,您应该查看应用程序 code/performance 和服务器与外部资源的交互,以及性能说明书。

但是,您还 运行 使用的版本比最新版本落后 30 多个版本,甚至不符合安全修复的条件。在这 30 个版本中,Liberty 继续做出显着的性能改进,因此我强烈建议您升级到最新版本。
此外,如果您还没有这样做,您应该尝试使用 JDK with J9 JVM,因为它在与 Liberty 一起使用时可以提高性能。

除了提到的内容之外,我建议查看两个有用的 Liberty 功能,它们可能会帮助您找到应用程序中的减速问题:

  • Event logging - 允许您跟踪通过 Liberty/application 个组件的请求。

给你类似的输出:

[12/15/14 18:24:29:528 IST] 0000002e EventLogging       I BEGIN requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.servlet.service # contextInfo=TradeWeb | TradeScenarioServlet
[12/15/14 18:24:29:531 IST] 0000002e EventLogging       I BEGIN requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.servlet.service # contextInfo=TradeWeb | TradeAppServlet
[12/15/14 18:24:29:532 IST] 0000002e EventLogging       I BEGIN requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.servlet.service # contextInfo=TradeWeb | /quote.jsp
[12/15/14 18:24:29:533 IST] 0000002e EventLogging       I BEGIN requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.servlet.service # contextInfo=TradeWeb | /displayQuote.jsp
[12/15/14 18:24:29:534 IST] 0000002e EventLogging       I BEGIN requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.datasource.psExecuteQuery # contextInfo=jdbc/TradeDataSource | select * from quoteejb q where q.symbol=?
[12/15/14 18:24:29:547 IST] 0000002e EventLogging       I END requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.datasource.psExecuteQuery # contextInfo=jdbc/TradeDataSource | select * from quoteejb q where q.symbol=? # duration=12.537ms
[12/15/14 18:24:29:556 IST] 0000002e EventLogging       I END requestID=AAY6TalVDTO_AAAAAAAAAAK # eventType=websphere.servlet.service # contextInfo=TradeWeb | /displayQuote.jsp # duration=22.171ms
  • Request timing - 如果请求需要超过 10 秒才能完成,则将请求检测为缓慢,如果请求未在 10 分钟内完成,则检测为挂起。