Joh*_*erg 8 java jetty spring-mvc maven maven-jetty-plugin
在我的Web应用程序开始加载之前,启动Jetty会有很长的延迟(8秒)
13:50:10 [INFO] jetty-9.4.5.v20170502
13:50:18 [INFO] Scanning elapsed time=146ms
Run Code Online (Sandbox Code Playgroud)
启用调试日志记录后,有两个有趣的步骤
提取依赖战争应用程序,毕竟需要时间(3s)
10:03:13 [DEBUG] Extracting entry = null from jar file:[..]/application-1.0.war
10:03:16 [DEBUG] Unpacked overlay: jar:file:[..]/application-1.0.war!/ to file:[..]
Run Code Online (Sandbox Code Playgroud)和以下4s延迟:
10:03:16 [DEBUG] Service loaders found in 0ms
10:03:20 [DEBUG] loaded interface javax.servlet.ServletContainerInitializer
Run Code Online (Sandbox Code Playgroud)如何调试或影响导致4s以上延迟的原因?
的pom.xml
<dependency>
<groupId>com.company</groupId>
<artifactId>application</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
[...]
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.5.v20170502</version>
<configuration>
<webApp>
<webInfIncludeJarPattern>empty</webInfIncludeJarPattern>
<containerIncludeJarPattern>empty</containerIncludeJarPattern>
</webApp>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
web.xml中
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.app.AnnotationConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
[...]
</web-app>
Run Code Online (Sandbox Code Playgroud)
你有一个比平均水平更大的 web 应用程序(70MB 的 WEB-INF/lib jar),但没有什么特别大的(我见过 800MB 的战争文件)
发生一些事情可能会导致速度变慢。
WEB-INF/lib/*.jar!/META-INF/resources/) 解压到 WebApp 临时目录中@HandlesType上的注释中声明的注释和类型javax.servlet.ServletContainerInitializer)如果您的文件系统很慢,那么上述任何一个都会减慢您的速度。
注意:Jetty 的 DEBUG 日志记录会告诉您每个的时间(甚至将字节码扫描时间分解为单个 jar)
字节码扫描步骤是启动时间最常受到影响的地方。
<containerIncludeJarPattern>不建议将其配置为“空”,这是 Servlet、JSP、Taglib 发挥作用所必需的。
containerIncludeJarPattern无论如何,默认值只是servlet / jsp / taglib jar。(扫描需要微秒)
也不应该只是“空”,它<webInfIncludeJarPattern>至少应该包含您的WEB-INF/classes内容(又名.*/classes/.*)。考虑将其设置为仅扫描WEB-INF/lib您需要的那些罐子。(就像是.*/lib/spring-.*\.jar$|.*/classes/.*)
WEB-INF/lib/*.jar你的and中的类的大小(以字节为单位)WEB-INF/classes实际上是无关紧要的。与计时更相关的是找到的文件数量(甚至是非类文件)。
如果您使用资源 jar ( WEB-INF/lib/*.jar!/META-INF/resources/),那么这是启动缓慢的重大惩罚/根源。
你可以做什么:
首先查看您的调试日志,这将告诉您哪些地方发生了问题。
接下来,如果启动时间很重要,请研究使用quickstartJetty 的功能(这有 2 个部分,一个构建时组件,用于扫描并构建jetty-quickstart.xml包含在您的 war 中的文件,以及一个运行时模块,用于查找并使用该组件(jetty-quickstart.xml如果找到))
最后,如果您使用资源 jar ( ),请考虑在构建期间( maven 中的阶段)WEB-INF/lib/*.jar!/META-INF/resources/将这些内容移出或移入您的 war 中的正常位置。这些很方便,但有一些您似乎不喜欢的副作用。(还要考虑运行时资源解析冲突的问题)。WEB-INF/libpackage
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |