改善JBoss 5启动缓慢问题

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

看起来初始化时间最长的组件是 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的建议(更改扫描的xml文件)。服务器未运行在调试模式下,因此MicSim的建议不相关。


你确定它有足够的内存,在JMX初始化时不会开始交换吗? - Thorbjørn Ravn Andersen
你的项目中使用EJB吗? - Volodymyr Bezuglyy
1
Mhaller的回答真的有帮助吗?帮了多少忙? - neu242
在阅读了mhaller的回答后,我也对你的做法很感兴趣。我的JBoss启动在同一位置最慢。目前还不能升级到最新的JBoss。 - aberrant80
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可能会尝试连接到“错误的本地主机”。该系统属性是java.rmi.server.hostname

  • 系统跟踪:如果这些操作都无法解决问题,您可以使用strace启动Java进程,以便您可以看到系统挂起的点(如果确实由于网络超时或类似原因而挂起)。


1
我遇到了“错误的本地主机”查找问题,我的集成测试会暂停长达一分钟。设置-Djava.rmi.server.hostname=127.0.0.1解决了我的问题,谢谢! - Lyle
1
我曾经遇到过与主机名类似的问题,我的 /etc/hosts 文件中列出了我的开发机器名称两次。这足以将加载速度从大约30秒减慢到大约5分钟。 - James Oravec

5

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

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


好的,它不一致,我将日志级别更改为DEBUG,现在启动需要1.5分钟 :-)。一旦问题被复制,我将发布调试日志。 - LiorH
1
日志中仍然没有太多有用的信息。尝试使用TRACE日志记录? :) - skaffman

3

我曾经遇到过这样的问题,但是通过将初始堆大小和最大堆大小设置为相同的值,我发现了一个不错的解决方法,也就是:

 -Xms512m -Xmx512m

通过这个方法,我成功将启动时间从4分钟缩短到了2分钟。


为了更好地解释,请查看此链接:http://www.petefreitag.com/articles/gctuning/,在第3.1节“总堆”中。 - Karma police

3
您对jmx-console的怀疑可能会误导您。可能有其他组件在后台执行与jmx-console无关的工作。根据我的经验,我们曾遇到过一个问题,一个小的war文件似乎需要3分钟才能加载!但实际上是无辜的。罪魁祸首部分原因是由于一个包含多个wars和jars的EAR文件。
虽然我不是专家,但我建议采取以下步骤:
1.尝试将日志记录提高到TRACE级别。通过这样做,我注意到其中一个部署器(我想是EJBDeployer)在我们的某个EAR中不必要地扫描了WAR文件。之后,我手动禁用了那些WAR文件的扫描。
2.在启动期间运行wireshark。我发现有些war文件在等待来自外部DTD请求的响应时挂起。这些网站要么不存在,要么不能向基于Java的程序正确地提供DTD文件。我可以通过让程序员使用本地DTD文件或在本地镜像这些DTD并在/etc/host中进行本地环回来加快速度。

1
您可以参考此链接,避免不必要的注释扫描,从而加快服务器启动速度。

1

0

我正在使用JBoss 5.1.0和Macbook Pro(2.26ghz 4gb),没有应用程序时启动需要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 Database”(内存数据库)。


6
请在你的投票下降时附上解释(只是为了从中学习)。 - Dani Cricco

0

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

I've solved that. It's a debugging issue. I've changed my debug settings from:

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

to:

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

and JBoss becomes fast again.

希望这能有所帮助。

这个看起来很有前途,确实我们从JDK 5切换到了JDK6。但是你说的更改设置是什么意思?我在哪里可以找到这些调试设置? - LiorH
主要问题在于启动JBOSS时传递给JVM的选项。因此,在使用Xdebug时,不应该使用选项*-Xnoagent-Djava.compiler=NONE*来启动JVM。(请参见第二部分中缺失的行)上面的示例是关于Java Service Wrapper(http://wrapper.tanukisoftware.org/doc/english/integrate-simple-win.html)的。这里有一个关于使用JSW将JBOSS作为服务运行的解释:http://community.jboss.org/wiki/RunJBossAsAServiceOnWIndows。 - MicSim
在哪里可以找到设置这些信息的属性文件!?!?!? - Luis C.
这将在JBoss的bin目录中(run.bat,run.conf.bat),或者如果您在开发机器上运行它,则在您的IDE中。 - Jason

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

0
  1. 关闭注释扫描和其他不需要的功能 https://community.jboss.org/wiki/jboss5xtuningslimming

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

我成功将“默认”配置文件的运行时间从15/20分钟缩短到了5分钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接