Glassfish/Payara:为什么将大型Web应用程序部署到Glassfish-4.1.1(或Payara Ser


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 Web应用程序(使用ObjectDB作为JPA持久性提供程序),我遇到了Glassfish4.1.1(超过10分钟)比Glassfish4.1(约2分钟)更长的部署时间。这大约慢了 5 倍。

[编辑:2016-09-13 尝试使用Payara 163 Full(Payara服务器4.1.1.163),花了20多分钟,甚至比Glassfish4.1.1慢,设置几乎相同]

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

Q1:有没有人经历过Glassfish-4.1和Glassfish-4.1.1[编辑:或Payara Server 4.1.1.163]之间的任何类似差异,以及我可以在哪里寻找差异点?

(我已经尝试使用 NetBeans 探查器对其进行调查,但要找到原因并不容易。


[编辑: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 名称声明:

[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:我还能做些什么来找出为什么它在那里停顿/停滞了很长时间?

感谢Payara团队的详细帮助,我得到了答案。

我的旧 Glassfish4.1 安装 (-

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

我已经将这些作为 NetBeans Web 应用程序项目的运行时 VMarg:

-Xms2048m -Xmx2048m

但是在安装 NetBeans8.1(使用 Glassfish4.1.1)和 Payara41 时,我忽略了在新服务器上也匹配它以便为其腾出空间。随着最大堆的增加和固定的最小值,Glassfish4.1.1 和 Payara41 上的部署时间现在约为 2 分钟。

最新更新