Glassfish的/似鲭水狼牙鱼:为什么会大量Web应用程序部署到GlassFish-4.1.1(或似鲭水狼牙鱼服务器4.1.1.163)采取比Glassfish的4.1

问题描述:

Mac OS X: Yosemite 10.10.5 

长5倍直到最近我一直在使用:Glassfish的/似鲭水狼牙鱼:为什么会大量Web应用程序部署到GlassFish-4.1.1(或似鲭水狼牙鱼服务器4.1.1.163)采取比Glassfish的4.1

NetBeans8.1beta 
Glassfish4.1 
Mojarra 2.2.7 

使用我最近调查:

NetBeans8.1 
Glassfish4.1.1 
Mojarra 2.2.12. 

具有非常大的JSF Web应用程序(与ObjectDB为JPA持久性提供者)我遇到大规模再部署时间,从而Glassfish4.1.1(超过10分钟)比到Glassfish 4.1(约2分钟)。这大约慢了5倍。

[编辑:2016年9月13日试图与似鲭水狼牙鱼163全(似鲭水狼牙鱼服务器4.1.1.163),它用了20分钟,比Glassfish4.1.1更慢,用几乎相同的设置]

我不可能在这里复制或提供大型网络应用程序的例子。

Q1:有没有人经历与GlassFish 4.1和Glassfish-4.1.1 之间的相似,区别[编辑:或似鲭水狼牙鱼服务器4.1.1.163],并在那里我我可能寻找差异点?

(我已经尝试使用NetBeans Profiler来研究它,但它不转向了这么容易还没有找到原因。)


[编辑:2016-09 -15时间测试]

我已经使用屏幕录像记录进行了仔细的并排比较,并与日志中的时间进行比较。

在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名称声明OK:

[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日志发生,但没有很长的停顿/持久性。

Q2:我还能做些什么来发现它为什么在那里暂停/拖延了很久?

+0

尝试设置服务器的日志记录以先调试并检查/比较时间 – Kukeltje

+0

我在您的问题中没有看到任何与'logging/timing'信息相关的JSF。 – Kukeltje

+0

@Kukeltje在最近的时间诊断(现在包含在问题中)显示它被“卡住”或“拖延”的时候,JSF确实可能不相关,我将删除JSF标签。 –

感谢详细的帮助from the Payara team我有一个答案。

我的旧Glassfish4.1安装(-Xmx2048m)和新的Glassfish4.1.1和Payara41安装(-Xmx512m)的最大堆设置不同。在启动时构建我的Web应用程序项目的数据库模型时,它达到了512m堆限制并导致了过多的垃圾收集(由JVisualVM显示),这大大减慢了部署速度。

我已经有了这些作为运行时间VMargs为NetBeans的Web应用程序项目:

​​

但在安装NetBeans8.1(与Glassfish4.1.1),然后Payara41,我忘了把也匹配这在新服务器上腾出空间。随着最大堆数的增加和固定最小值,Glassfish4.1.1和Payara41上的部署时间现在约为2分钟。