Java 码头启动延迟

Java 码头启动延迟,java,spring,deployment,web-applications,jetty,Java,Spring,Deployment,Web Applications,Jetty,我正试图找出在Jetty启动过程中,1分钟延迟的原因。这是配置问题、我的应用程序还是其他问题 我在服务器上安装了Jetty 7(Jetty-7.0.1.v20091125,2009年11月25日),并在webapps目录中部署了一个45MB ROOT.war文件。这是Jetty中唯一配置的webapp。然后,我使用以下命令启动Jetty: java -DSTOP.PORT=8079 -DSTOP.KEY=mystopkey -Denv=stage -jar start.jar etc/jetty

我正试图找出在Jetty启动过程中,1分钟延迟的原因。这是配置问题、我的应用程序还是其他问题

我在服务器上安装了Jetty 7(Jetty-7.0.1.v20091125,2009年11月25日),并在webapps目录中部署了一个45MB ROOT.war文件。这是Jetty中唯一配置的webapp。然后,我使用以下命令启动Jetty:

java -DSTOP.PORT=8079 -DSTOP.KEY=mystopkey -Denv=stage -jar start.jar etc/jetty-logging.xml etc/jetty.xml &
完成此操作后,我立即获得两行输出:

2010-03-07 14:20:06.642:INFO::Logging to StdErrLog::DEBUG=false via org.eclipse.jetty.util.log.StdErrLog
2010-03-07 14:20:06.710:INFO::Redirecting stderr/stdout to /home/zing/jetty-distribution-7.0.1.v20091125/logs/2010_03_07.stderrout.log
当我按enter键时,返回命令提示符。查看日志文件(logs/2010_03_07.stderrout.log),我在开头看到了以下内容:

2010-03-07 14:08:50.396:INFO::jetty-7.0.1.v20091125
2010-03-07 14:08:50.495:INFO::Extract jar:file:/home/zing/jetty-distribution-7.0.1.v20091125/webapps/ROOT.war!/ to /tmp/Jetty_0_0_0_0_8080_ROOT.war___.8te0nm/webapp
2010-03-07 14:08:52.599:INFO::NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet
2010-03-07 14:09:51.379:INFO::Set web app root system property: 'webapp.root' = [/tmp/Jetty_0_0_0_0_8080_ROOT.war___.8te0nm/webapp]
2010-03-07 14:09:51.585:INFO::Initializing Spring root WebApplicationContext
INFO  - ContextLoader              - Root WebApplicationContext: initialization started
INFO  - XmlWebApplicationContext   - Refreshing Root WebApplicationContext: startup date [Sun Mar 07 14:09:51 PST 2010]; root of context hierarchy
...
注意第三行和第四行之间有一分钟的停顿。在这一点上,Jetty在做什么?还可能发生什么事?它甚至看起来还没有开始我的Spring初始化

请注意,我检查了我的/tmp目录,查看是否是解包war文件的时候,但即使在延迟1分钟开始时,文件也已完全解包

更新:

多亏了建议,我添加了调试日志。我发现提取war文件大约用了2秒钟。但是在Init SecureRandom上大约有41秒的延迟:

2010-03-07 21:54:45.414:DBUG::Starting SessionHandler@79884a40@
2010-03-07 21:54:45.414:DBUG::Starting org.eclipse.jetty.server.session.HashSessionManager@5fe8ce8
2010-03-07 21:54:45.416:DBUG::Container org.eclipse.jetty.server.Server@35175422 + org.eclipse.jetty.server.session.HashSessionIdManager@1d96f4b5 as sessionIdManager
2010-03-07 21:54:45.416:DBUG::Starting org.eclipse.jetty.server.session.HashSessionIdManager@1d96f4b5
2010-03-07 21:54:45.416:DBUG::Init SecureRandom.
2010-03-07 21:55:26.244:DBUG::STARTED org.eclipse.jetty.server.session.HashSessionIdManager@1d96f4b5
2010-03-07 21:55:26.247:DBUG::STARTED org.eclipse.jetty.server.session.HashSessionManager@5fe8ce8
2010-03-07 21:55:26.248:DBUG::Starting ConstraintSecurityHandler@6b9cd75a@
2010-03-07 21:55:26.261:DBUG::Starting ServletHandler@62c2ee15@
什么是SecureRandom?为什么会导致这种延迟

解决方案:


看来我的电脑有问题了。我刚刚将其设置为一个新的登台服务器,除了我之外,没有人使用它。因此,系统没有足够的熵让随机数生成器快速生成足够的随机性。

尝试更改日志级别以进行调试,并查看它是否显示了任何有趣的内容。如果没有其他问题,它可能允许您缩小启动顺序中问题所在的范围。

Jetty 7(可能更低):

使用
-Dorg.eclipse.jetty.util.log.debug=true设置(very)详细调试日志记录(请参阅),并尝试查看这一分钟内发生的情况

作为补充说明,您可能需要jsp支持,因此在启动时应该传递
-DOPTIONS=Server,deploy,jsp
(请参阅)

如果您不需要Jetty7.x中的新奇东西,那么您应该坚持使用Jetty6而不是Jetty7Eclipse(更稳定,eclipse迁移带来的问题更少,文档更好,使用更方便)

码头8:


在Jetty 8.1中:系统属性[org.eclipse.Jetty.util.log.DEBUG]已被弃用!(改用org.eclipse.jetty.LEVEL=DEBUG)

@Pascal,谢谢你的帮助。我用一些调试日志更新了我的问题。它看起来像是被挂在了安全门上。有什么想法吗?@Pascal,我想我找到了解决办法。你的回答帮助我找到了它,谢谢!另外,根据你的建议,我已经改回了6.1.22。要在你的机器上增加熵,你可以使用@Stephan。谢谢如果您有任何进一步的想法,我已经在问题中添加了一些调试日志。