首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebSphere 9启动时间过长

WebSphere 9启动时间过长
EN

Stack Overflow用户
提问于 2016-07-14 08:30:01
回答 2查看 5K关注 0票数 5

我正在测试如何驱动WebSphere应用服务器9,完整的配置文件,我对启动配置文件所需的时间很感兴趣。我已经安装了一个应用程序,理论上,这可能是罪魁祸首,但是日志没有显示任何证据。日志文件的相关部分:

代码语言:javascript
复制
[14-07-2016 9:15:06:955 BST] 0000005b ApplicationMg A   WSVR0221I: Application started: isclite
[14-07-2016 9:15:06:956 BST] 0000005b CompositionUn A   WSVR0191I: Composition unit WebSphere:cuname=isclite in BLA WebSphere:blaname=isclite started.
[14-07-2016 9:16:14:410 BST] 0000005a InternalGener I   DSRA8225I: DataSource JNDI name : jdbc/DefaultEJBTimerDataSource
[14-07-2016 9:16:14:413 BST] 0000005a InternalGener I   DSRA8203I: Database product name : Apache Derby
[14-07-2016 9:16:14:413 BST] 0000005a InternalGener I   DSRA8204I: Database product version : 10.11.1.1 - (1616546)
[14-07-2016 9:16:14:413 BST] 0000005a InternalGener I   DSRA8205I: JDBC driver name  : Apache Derby Embedded JDBC Driver
[14-07-2016 9:16:14:414 BST] 0000005a InternalGener I   DSRA8206I: JDBC driver version  : 10.11.1.1 - (1616546)
[14-07-2016 9:16:14:414 BST] 0000005a InternalGener I   DSRA8218I: JDBC driver specification level  : 4.2
[14-07-2016 9:16:14:773 BST] 0000005a WASSchedulerC I   SCHD0100I: Scheduler tables verified successfully.

正如您在第2行和第3行看到的那样,服务器等待超过一分钟。记录中没有异常或任何其他信息可能会显示问题。

有人知道问题出在哪里吗?

编辑#1:

按照XSurgent的建议,我禁用了应用程序的自动启动并重新启动了服务器。启动时间是正常的,但是表明Apache正在启动的行不再可见,这似乎表明正在消耗所有时间的是Derby启动。我的推理有意义吗?

编辑#2:

我已经将EJB计时器更改为使用不同的数据库(Oracle而不是嵌入式Derby),但1分钟的延迟仍在发生。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-14 15:29:45

对于包含大型web模块的应用程序,应用程序启动时间可以增加。(“大”意味着有许多类,通常是因为许多JAR文件打包在web模块中。)增加的原因之一是对类信息进行新的扫描,以检测CDI内容。例如,检测@Inject注释。

扫描是必需的--即使是不包含CDI内容的模块--也是为了符合CDI1.2新特性的规范。扫描的成本与被扫描模块中的类数成正比。

为了提高启动性能,引入了两个属性来禁用不包含CDI内容的应用程序的CDI处理。有关属性和使用说明的说明,请参阅本技术说明:

http://www-01.ibm.com/support/docview.wss?uid=swg21983564

这两个属性是:

代码语言:javascript
复制
As a java custom property: "com.ibm.ws.cdi.enableImplicitBeanArchives"
As a filter property: "Enable-Implicit-Bean-Archive"  

As a java custom property: "com.ibm.ws.cdi.enableCDI"
As a filter property: "Enable-CDI"

这里,"java自定义属性“是指在服务器进程中设置的属性。注意,这必须在服务器配置中完成:在启动脚本中设置属性只会影响启动过程,而不是服务器进程。

"filter属性“是指可以在文件"amm.filter.properties”中设置的属性或可以在Java存档(EAR/WAR/RAR/JAR文件)中设置的清单主属性。(技术说明中提供了设置过滤器属性的更详细说明。)

以下是对这些属性及其含义的概述:

代码语言:javascript
复制
Name: com.ibm.ws.cdi.enableImplicitBeanArchives, Enable-Implicit-Bean-Archive
Allowed Values: true, false
Default Value: true
Description: By setting the property to false, CDI-related annotation scanning steps are disabled for archives that do not contain a bean descriptor (beans.xml).

Name: com.ibm.ws.cdi.enableCDI, Enable-CDI
Allowed Values: true, false
Default Value: true
Description: By setting the property to false, all CDI steps are disabled for the archive.

要使用的属性取决于特定的要求:如果要禁用服务器进程的所有CDI函数,请设置java自定义属性。将清单主属性设置为禁用特定应用程序或模块的CDI功能。

判断CDI是否导致启动时间增加的一种方法是收集线程转储并查找类似于以下内容的调用堆栈:

代码语言:javascript
复制
4XESTACKTRACE                at com/ibm/ws/jsf/ext/JSFInjectionClassListCollaborator.getInjectionClasses(JSFInjectionClassListCollaborator.java:105)
4XESTACKTRACE                at com/ibm/ws/cdi/classic/CDIArchiveImpl.getInjectionClassList(CDIArchiveImpl.java:77)
4XESTACKTRACE                at com/ibm/ws/cdi/impl/weld/BeanDeploymentArchiveImpl.initializeJEEComponentClasses(BeanDeploymentArchiveImpl.java:349)
4XESTACKTRACE                at com/ibm/ws/cdi/impl/weld/BeanDeploymentArchiveImpl.scan(BeanDeploymentArchiveImpl.java:281)
4XESTACKTRACE                at com/ibm/ws/cdi/impl/weld/BeanDeploymentArchiveImpl.scan(BeanDeploymentArchiveImpl.java:255)
4XESTACKTRACE                at com/ibm/ws/cdi/impl/weld/WebSphereCDIDeploymentImpl.scan(WebSphereCDIDeploymentImpl.java:530)
4XESTACKTRACE                at com/ibm/ws/cdi/impl/CDIContainerImpl.applicationStarting(CDIContainerImpl.java:117)
4XESTACKTRACE                at com/ibm/ws/cdi/classic/CDIRuntimeImpl.applicationStarting(CDIRuntimeImpl.java:323)

Thomas,IBM公司,IBM WebSphere应用服务器的开发人员

票数 6
EN

Stack Overflow用户

发布于 2016-08-10 06:14:30

让它更简单:如果您不使用JEE年刊(例如,您的服务基于JAX-RS或Spring),您可以关闭CDI扫描:如果您部署了一个WAR文件,则将其插入WAR#/META/清单-MF这一行:忽略扫描包: org、net、com、javax,当然,您决定将哪些Java包排除在CDI扫描之外。

我的例子:

代码语言:javascript
复制
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: ti
Build-Jdk: 1.7.0_45
Ignore-Scanning-Packages: org, net, com ,javax

如果您部署了一个EAR文件:将一个不同的行注入到它的清单中:Enable-CDI: false

如果希望在不更改WAR文件的情况下使此更改成为全局的,则编辑(创建if missing):/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties/amm.filter.properties并在其中添加一行: com.ibm.ws.amm.scan.context.filter.packages=com,org、net、javax )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38369199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档