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 [编辑:或者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:我还能做些什么来找出它为什么暂停/拖延多年?
答案 0 :(得分:1)
感谢详细的帮助from the Payara team我有一个答案。
我的旧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分钟。