0
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 Server 4.1.1.163),它花了 20 多分钟,甚至比 Glassfish4.1.1 慢,设置几乎相同]

我不可能在这里重现或提供大型网络应用程序的示例。

Q1:有没有人经历过 Glassfish-4.1 和 Glassfish-4.1.1 [编辑:OR Payara Server 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 名称声明:

[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:我还能做些什么来找出为什么它会在那里暂停/停滞很久?

4

1 回答 1

1

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

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

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

-Xms2048m -Xmx2048m

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

于 2016-11-02T12:01:50.207 回答