20

我们从 JBoss 4(和 JDK 5)升级到 JBoss 5(和 JDK 6)。问题是开始时间已经从 1.5 分钟(在 JBoss 4 上)变为超过 4 分钟。

18:53:35,444 INFO  [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221053)] Started in 3m:9s:262ms

似乎花费 JBoss 初始化时间最长的组件是 JMX

18:50:41,926 INFO  [LogNotificationListener] Adding notification listener for logging mbean "jboss.system:service=Logging,type=Log4jService" to server org.jboss.mx.server.MBeanServerImpl@1adc122[ defaultDomain='jboss' ]
18:52:38,797 INFO  [JMXConnectorServerService] JMX Connector server: service:jmx:rmi://lharel2/jndi/rmi://lharel2:1090/jmxconnector

从调试服务器日志中,我在有问题的时候得到了这些行:

2009-12-18 18:51:00,886 DEBUG [org.jboss.deployment.MappedReferenceMetaDataResolverDeployer] (main) vfsfile:/C:/QC/Views/QCDev/jboss-5.1.0.GA/server/default/deploy/jmx-console.war/ endpoint mappings:
2009-12-18 18:51:00,886 DEBUG [org.jboss.deployment.MappedReferenceMetaDataResolverDeployer] (main) Processing unit=jmx-console.war, structure: jmx-console.war
2009-12-18 18:52:35,209 DEBUG [org.jboss.deployment.OptAnnotationMetaDataDeployer] (main) Deployment is metadata-complete, skipping annotation processing, ejbJarMetaData=null, jbossWebMetaData=org.jboss.metadata.web.spec.Web23MetaData@1f, jbossClientMetaData=null, metaDataCompleteIsDefault=false

项目中没有 EJB。

内存设置如下:

 -Xms128m -Xmx512m -XX:MaxPermSize=256m

您知道如何改进 JBoss 的启动时间吗?

更新:到目前为止没有运气,我尝试了 shreeni 的建议(更改了扫描 xmls)。服务器未在调试模式下运行,因此 MicSim 的建议不相关

4

10 回答 10

8

在没有更多信息的情况下向蓝天射击

  • 网络超时:部署 jmx-console.war 时延迟 1.5 分钟可能表示网络超时(例如 3 x 30 秒)。尝试启动 JBoss 并使用-b命令行参数或jboss.bind.address系统属性将其绑定到特定的 IP 地址。此外,请尝试确保系统上的主机和 DNS 解析设置正确。

  • JMX 也在使用 RMI,您可能希望将RMI 服务器主机名设置为系统属性。在某些 Linux 发行版上,RMI 在查找正确的主机名时存在问题,并且 jmx-console.war 可能会尝试连接到“错误的 localhost”。系统属性为java.rmi.server.hostname

  • 系统跟踪:如果这没有帮助,您可能希望使用strace启动 java 进程,这样您就可以看到系统挂起的点(如果它确实由于网络超时或类似情况而挂起)。

于 2009-12-27T00:00:42.033 回答
4

这是日志中的一个非常大的差距。我建议更改日志配置以在 DEBUG 级别记录所有内容,而不是 INFO。这将生成更多的日志条目,但希望能帮助您缩小范围。

最简单的方法是-Djboss.server.log.threshold=DEBUG在启动 JBoss 时设置系统属性

于 2009-12-18T08:49:59.830 回答
3

您对 jmx-console 的怀疑可能会产生误导。可能有其他组件在后台工作,与 jmx-console 无关。根据我的经验,我们遇到了一个问题,即加载一个小型战争文件似乎需要 3 分钟!这是无辜的。罪魁祸首部分是由于一个包含许多战争和罐子的 EAR 文件。

虽然我不是专家,但我建议以下几点:

  1. 尝试将日志记录调高到 TRACE。通过这样做,我目睹了其中一个部署者(我认为是 EJBDeployer)不必要地扫描了我们的一个 EAR 中的 WAR。然后我手动禁用了对这些 WAR 文件的扫描。
  2. 在启动期间运行wireshark。我发现一些战争文件在等待来自外部 DTD 请求的响应时挂起。这些网站要么现在不存在,要么无法将 DTD 文件正确地提供给基于 java 的程序。我可以通过让程序员使用本地 DTD 文件或在本地镜像这些 DTD 并在本地使用 /etc/host 环回来加速它。
于 2010-01-27T01:58:08.330 回答
3

我遇到了这样的问题,但是通过将初始堆大小和最大堆大小设置为相同的值,我发现了一个很好的改进,我的意思是:

 -Xms512m -Xmx512m

有了这个,我将开始时间从 4 分钟提高到了 2 分钟。

于 2010-11-17T23:09:23.540 回答
1

您可以参考此链接以避免不必要的注释扫描,这可能会加速您的服务器启动

于 2009-12-24T12:34:25.400 回答
1

请参阅http://community.jboss.org/wiki/jboss5xtuningslimming特别是“调整”部分。

于 2011-02-28T12:28:53.423 回答
0

我正在使用带有 Macbook pro (2.26ghz 4gb) 的 JBoss 5.1.0 没有应用程序,它在 54 秒内启动

15:00:26,449 INFO  [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 54s:720ms

我根据“默认”进行了新配置。JMS 数据源指向 Postgres 数据库而不是“Hypersonic 数据库”(内存数据库中)

于 2009-12-21T18:03:35.173 回答
0

我想你是在调试模式下开始的。此模式最多可比正常模式慢 3 倍。但是从JDK5切换到JDK6时也可能会出现问题。我在网上找到了这个解决方案:

我已经解决了。这是一个调试问题。我已将调试设置从以下位置更改:

wrapper.java.additional.26=-Xdebug
wrapper.java.additional.27=-Xnoagent
wrapper.java.additional.28=-Djava.compiler=NONE
wrapper.java.additional.27=-Xrunjdwp:transport=dt_socket,address=7199,server=y,suspend=n

到:

wrapper.java.additional.26=-Xdebug
wrapper.java.additional.27=-Xrunjdwp:transport=dt_socket,address=7199,server=y,suspend=n

JBoss 又变快了。

希望这可以帮助。

于 2009-12-23T16:34:53.797 回答
0

您需要 JMX 控制台应用程序吗?务实的做法是从服务器上取消部署它,您仍然可以使用 jconsole 或 jvisualvm 来完成基本相同的事情。

于 2009-12-26T23:43:00.413 回答
0
  1. 关闭注释扫描和其他不需要的功能https://community.jboss.org/wiki/jboss5xtuningslimming

  2. 当您从 Eclipse 启动/停止 JBoss 时,它不会正确清理 tmp 和工作文件夹。设置外部工具配置并运行批处理文件以在每次启动前删除 tmp 和工作文件夹中的所有内容。

我能够将“默认”配置文件的运行时间从 15/20 分钟加快到 5 分钟。

于 2012-11-16T19:40:46.087 回答