2016-03-04 4 views
0

В моем проекте я использую JAX-RS (websphere), EJB и OpenJPA в качестве основных технологий.Служба JAX-RS слишком медленная

Даже в очень простом сценарии простых вызовов GET обслуживание занимает довольно много времени. Основными задачами, которые я вижу, является вызов DB с использованием JPA, преобразование объекта объекта в объект передачи с использованием Dozer mapper и, наконец, базовая реализация websphere, конвертирующая объект передачи в JSON. Данные - всего несколько строк в таблице без активной загрузки (таким образом, нет данных из таблицы, отличной от целевой таблицы).

Я не думаю, что здесь используются огромные вычисления. Тем не менее он занимает около 10-12 секунд. Также сервер достаточно мощный.

Каким должен быть мой подход, чтобы выяснить причину? Я планирую узнать время, затрачиваемое каждым основным компонентом, использующим System.nanoTime(). Но есть ли еще какие-то другие подходы?

ответ

0

Это то, что мы сделали, когда у нас были такие проблемы раньше. Мы проанализировали и обнаружили основные узкие места, в большинстве случаев несколько неправильных параметров/выбор методов приводят к таким узким местам. Итак, попробуйте использовать альтернативы для методов, которые потребляют большую часть вашего времени.

Вам не нужно использовать system.nanotime. Вы можете использовать любой инструмент профилировщика, такой как virtualVM, который даст вам подробный анализ времени, затраченного каждым отдельным устройством.

+0

Спасибо за ввод. Наиболее распространенным инструментом является JProfiler. Какой из них вы бы предложили? – Mandroid

+0

Jprofiler платный Я думаю, поэтому я не предлагал этого. Раньше мы использовали JRockit, но, похоже, его больше не поддерживали. Они объединили его в HotspotVM. VisualVM - проект oracles, поэтому я предполагаю, что они будут использовать некоторые функции от jrockit. –

0

Этот ответ может не отвечать на ваш вопрос напрямую. Но вы можете использовать jvisualVM, чтобы найти основную причину. Ниже блог поможет вам настроить его на затмение быстро
https://blog.idrsolutions.com/2013/05/setting-up-visualvm-in-under-5-minutes/

jvisualVM это инструмент поставляется бесплатно с JDK, вы можете обнаружить его в бункерном папке JDK с именем «jvisualvm.exe» вы можете просто дважды щелкните по нему, чтобы начать

После того, как вы настроили запуск своей программы, пусть VisualVM захватит вашу обработку. то вы могли бы интерпретировать, какой класс тратит больше процессорного или временного потребления, нажав кнопку «Sampler -> CPU», что даст вам, какой метод занимает больше времени, а блог CPU.Below также поможет вам проанализировать данные.

http://scn.sap.com/community/java/blog/2015/09/18/step-by-step-to-use-visualvm-to-do-performance-measurement

Если ваша программа проводит большую часть времени в сети, связанные пакеты, то либо ваша программа ожидает ответ от сервера или ваша программа вызова сервера чаще в стороне петли, (В этом случае вам нужно найти способ агрегирования запроса данных, чтобы уменьшить внешний вызов на внешний сервер)
Пожалуйста, держите нас в курсе ваших результатов!

+0

Я бы это сделал. Благодарю. – Mandroid

Смежные вопросы