#java #websphere-liberty
Вопрос:
Существуют ли какие-либо существенные способы повышения производительности приложения websphere liberty.
Приложение является монолитным с примерно 40 веб-приложениями и одним ухом. Никаких веб-служб REST, кроме сервлета и кода jsp.
Версия продукта: 19.0.0.3
Вероятно, около 300 тысяч строк Java-кода.
Загрузка запросов может занять 30-40 секунд.
Он работает под управлением Java8.
Это машины для разработчиков, Mac Book Pro, ядро Darwin версии 19.6.0. 16 гигабайт оперативной памяти.
Вот некоторые из особенностей:
<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>
Ответ №1:
В дополнение к тому, что было упомянуто, я бы предложил взглянуть на две полезные функции Liberty, которые могут помочь вам найти замедление в вашем приложении:
- Ведение журнала событий — который позволяет отслеживать запросы, проходящие через компоненты Liberty/приложения.
Дает вам результат, аналогичный:
[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
- Время запроса — которое определяет запросы как медленные, если для выполнения запросов требуется более 10 секунд, или как зависшие, если запросы не завершаются за 10 минут.
Ответ №2:
Предполагается, что WebSphere Liberty сам по себе должен быть легким и быстрым. Поэтому, вероятно, вам следует искать такие области, как
- Серверу выделено достаточно памяти.
- Примеры использования, которые занимают 30-40 секунд, необходимо профилировать, чтобы понять, какая часть обработки занимает время. Это может привести к тому, что вы потратите много времени на обработку базы данных из-за плохо выполняемых запросов.
Вы можете использовать инструмент jvisualvm для выполнения профилирования процессора и памяти, чтобы понять горячие точки. Для получения более полных данных, связанных с производительностью, вы также можете использовать javamelody с открытым исходным кодом, который очень легко интегрируется с любым приложением EE и сервером EE
Ответ №3:
Вы можете ознакомиться с поваренной книгой IBM WebSphere Application Server по производительности. Некоторые советы являются общими для WebSphere traditional и Liberty, а некоторые являются уникальными для различных продуктов. Там есть секция Свободы.
Ответ №4:
Как и в других упомянутых ответах, вам следует ознакомиться с кодом приложения/производительностью и взаимодействием сервера с внешними ресурсами, а также с поваренной книгой по производительности.
Однако вы также используете версию, которая отстает от последней версии более чем на 30 выпусков и даже не подходит для исправлений безопасности. В этих 30 выпусках Liberty продолжала значительно повышать производительность, поэтому я настоятельно призываю вас перейти на последнюю версию.
Кроме того, если вы еще этого не сделали, вам следует попробовать использовать JDK с J9 JVM, так как это обеспечивает повышение производительности при использовании с Liberty.