Glassfish/Payara: почему развертывание большого веб-приложения на Glassfish-4.1.1 (или Payara Server 4.1.1.163) может занять в 5 раз больше времени, чем на Glassfish-4.1

Mac OS X: Yosemite 10.10.5

До недавнего времени я использовал:

NetBeans8.1beta
Glassfish4.1
Mojarra 2.2.7

Недавно я исследовал использование:

NetBeans8.1
Glassfish4.1.1
Mojarra 2.2.12.

С очень большим веб-приложением JSF (с ObjectDB в качестве поставщика сохраняемости JPA) время развертывания для Glassfish4.1.1 значительно больше (более 10 минут), чем для Glassfish4.1 (около 2 минут). Это примерно в 5 раз медленнее.

[EDIT: 2016-09-13 Пробовал с Payara 163 Full (Payara Server 4.1.1.163), и это заняло более 20 минут, даже медленнее, чем на Glassfish 4.1.1, с почти идентичной настройкой]

Я не могу воспроизвести здесь или предоставить примеры большого веб-приложения.

Q1: Кто-нибудь сталкивался с похожими различиями между Glassfish-4.1 и Glassfish-4.1.1 [EDIT: ИЛИ Payara Server 4.1.1.163], и где я мог бы искать точку различия ?

(Я уже пытаюсь исследовать это с помощью профилировщика NetBeans, но найти причину пока не так-то просто.)


[EDIT: временные тесты 15 сентября 2016 г.]

Я провел тщательное параллельное сравнение, используя запись скринкаста и сравнение с таймингами в журнале.

В Payara41 (4.1.1.163) и Glassfish4.1.1 он «зависает», как показано ниже, примерно на 10 минут, и я не нашел ни одного параметра журнала, который дает одну строку вывода здесь, где возникает проблема, и запускает сервер в Режим DEBUG также не дает никакой дополнительной информации.

[2016-09-14T23:02:53.450+1000] [Payara 4.1] [INFO] [NCLS-LOGGING-00009] [javax.enterprise.logging] [tid: _ThreadID=19 _ThreadName=RunLevelControllerThread-1473858173343] [timeMillis: 1473858173450] [levelValue: 800] [[
  Running Payara Version: Payara Server  4.1.1.163 #badassfish (build 215)]]

... проходит через все шаги, а затем через десятки этих объявлений имен EJB JNDI:

[2016-09-14T23:03:48.823+1000] [Payara 4.1] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=74 _ThreadName=admin-thread-pool(2)] [timeMillis: 1473858228823] [levelValue: 800] [[
  Portable JNDI names for EJB BeanName: [java:global/app-name/BeanName!com.example.BeanName, java:global/app-name/BeanName]]]

Выдает это сообщение версии WELD:

[2016-09-14T23:03:48.875+1000] [Payara 4.1] [INFO] [] [org.jboss.weld.Version] [tid: _ThreadID=74 _ThreadName=admin-thread-pool(2)] [timeMillis: 1473858228875] [levelValue: 800] [[
  WELD-000900: 2.3.5 (Final)]]

... затем проходит около 8 секунд до этого сообщения..

[2016-09-14T23:03:56.666+1000] [Payara 4.1] [INFO] [] [org.jboss.weld.Event] [tid: _ThreadID=74 _ThreadName=admin-thread-pool(2)] [timeMillis: 1473858236666] [levelValue: 800] [[
WELD-000411: Observer method [BackedAnnotatedMethod] private org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider.processAnnotatedType(@Observes ProcessAnnotatedType) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.]]

... Затем подождите много минут (обычно около 10 минут), прежде чем возобновить эти безобидные предупреждения.

[2016-09-14T23:11:33.387+1000] [Payara 4.1] [INFO] [] [org.jboss.weld.Bootstrap] [tid: _ThreadID=74 _ThreadName=admin-thread-pool(2)] [timeMillis: 1473858693387] [levelValue: 800] [[
WELD-001125: Illegal bean type java.util.Comparator<javax.persistence.metamodel.EntityType<?>> ignored on [EnhancedAnnotatedTypeImpl] public static  class com.example.ElementManager$EntityTypeSorter]]

[2016-09-14T23:11:59.736+1000] [Payara 4.1] [WARNING] [] [org.glassfish.jersey.internal.Errors] [tid: _ThreadID=74 _ThreadName=admin-thread-pool(2)] [timeMillis: 1473858719736] [levelValue: 900] [[
The following warnings have been detected: WARNING: Parameter 1 of type T from public void com.example.NumberProperty.setDefaultValue(T) is not resolvable to a concrete type.

]]

Подобные предупреждающие сообщения появляются в журнале Glassfish4.1, но нет длительной паузы/задержки.

Вопрос 2. Что еще я могу сделать, чтобы выяснить, почему он приостанавливается/зависает там целую вечность?


person Webel IT Australia - upvoter    schedule 28.02.2016    source источник
comment
Попробуйте сначала настроить ведение журнала сервера на отладку и проверить/сравнить тайминги.   -  person Kukeltje    schedule 29.02.2016
comment
Я не вижу ничего, связанного с JSF, в информации о «регистрации / времени» в вашем вопросе.   -  person Kukeltje    schedule 15.09.2016
comment
@Kukeltje В тот момент, когда недавняя диагностика времени (теперь включенная в вопрос) показывает, что он зависает или останавливается, JSF действительно, вероятно, не имеет значения, я удалю тег JSF.   -  person Webel IT Australia - upvoter    schedule 17.09.2016


Ответы (1)


Благодаря подробной помощи от команды Payara у меня есть ответ.

Максимальные настройки кучи различались между моей старой установкой Glassfish4.1 (-Xmx2048m) и новой установкой Glassfish4.1.1 и Payara41 (-Xmx512m). При построении модели базы данных моего проекта веб-приложения при запуске она достигла предела кучи в 512 м и вызвала чрезмерную сборку мусора (как показал JVisualVM), что значительно замедлило развертывание.

У меня уже были эти VMargs во время выполнения для проекта веб-приложения NetBeans:

-Xms2048m -Xmx2048m

Но при установке NetBeans8.1 (с Glassfish4.1.1), а затем и Payara41, я забыл также сопоставить это на новых серверах, чтобы освободить для него место. С увеличенной максимальной кучей и фиксированным минимумом время развертывания теперь составляет около 2 минут как на Glassfish4.1.1, так и на Payara41.

person Webel IT Australia - upvoter    schedule 02.11.2016