Jetty 12.1.4启动耗时优化求助:QuickStart模块未生效
Jetty 12.1.4 (Eclipse Temurin 11) 启动延迟优化方案
一、先定位耗时瓶颈
- 开启Jetty启动跟踪日志,在
start.ini中添加:
重点查看每个org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog org.eclipse.jetty.level=DEBUGWebAppContext.start()的执行耗时,定位是类加载、依赖扫描、框架初始化(如Spring)还是JSP处理拖慢了启动。 - 启用JVM GC日志排查停顿:
分析启动阶段是否有频繁GC导致的延迟。-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -Xloggc:./gc-startup.log
二、配置层面优化
1. 关闭不必要的注解扫描
- 在每个war的
web.xml中添加<web-app metadata-complete="true">,禁止Jetty扫描类路径查找Servlet/Filter/Listener注解;或者在上下文XML中配置:<Set name="metadataComplete">true</Set>
2. 优化类加载策略
- 将多个war共享的依赖jar放到Jetty的
lib/ext目录,避免重复加载;同时在上下文XML中设置:
优先使用父类加载器加载共享依赖,减少每个war的类加载时间。<Set name="parentLoaderPriority">true</Set>
3. 精细化QuickStart配置
- 用Jetty的
quickstart-maven-plugin为每个war提前生成WEB-INF/quickstart-web.xml,明确指定需要启动的Servlet、Filter、Listener,避免自动扫描。示例插件配置:<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>quickstart-maven-plugin</artifactId> <version>12.1.4</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> - 强制使用
QUICKSTART模式,在上下文XML中设置:<Call name="setAttribute"> <Arg>org.eclipse.jetty.quickstart.mode</Arg> <Arg>QUICKSTART</Arg> </Call>
4. 彻底禁用JSP冗余操作
- 确认JSP已预编译完成后,在上下文XML中同时设置:
<Call name="setAttribute"> <Arg>org.eclipse.jetty.jsp.precompiled</Arg> <Arg>true</Arg> </Call> <Call name="setAttribute"> <Arg>org.eclipse.jetty.jsp.scan</Arg> <Arg>false</Arg> </Call>
5. 调整启动线程池
- 在
start.ini中增加线程池配置,避免启动时线程阻塞:jetty.threadPool.minThreads=20 jetty.threadPool.maxThreads=200 jetty.threadPool.idleTimeout=60000
三、部署策略调整
1. 并行部署多个WebApp
- 在
start.ini中启用并行部署:
让多个war同时启动,替代默认的串行启动逻辑。deploy.parallel=true deploy.parallel.maxThreads=8
2. 延迟非核心应用启动
- 对非核心应用的上下文XML设置
lazyInit="true",让应用在第一次请求时才初始化:<Set name="lazyInit">true</Set> - 或者通过
startupOrder控制启动顺序,核心应用设为低数值优先启动:<Set name="startupOrder">1</Set>
3. 合并同类应用
- 如果18个war业务逻辑相似,可合并为一个多上下文应用,减少
WebAppContext的初始化次数。
四、JVM层面优化
- 配置足够的堆内存与元空间,避免启动时频繁GC:
-Xms2g -Xmx2g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g - 启用类数据共享(CDS),提前生成共享类归档:
- 首次启动Jetty时添加参数:
-XX:+UseAppCDS -XX:DumpLoadedClassList=./jetty-classes.lst - 生成归档文件:
java -XX:+UseAppCDS -XX:SharedClassListFile=./jetty-classes.lst -XX:SharedArchiveFile=./jetty.jsa -jar start.jar - 后续启动时添加:
-XX:+UseAppCDS -XX:SharedArchiveFile=./jetty.jsa
- 首次启动Jetty时添加参数:
- 禁用字节码验证(生产环境需评估安全风险):
-Xverify:none
内容的提问来源于stack exchange,提问作者S C A R Y G O D
相关产品推荐
相关产品推荐

