如何以生产模式运行Spring服务器应用并优化性能?
Spring Boot 生产构建优化指南(提升至Express级性能)
核心优化步骤:
1. 构建纯净的生产包
默认mvn package会生成包含所有依赖的可执行jar,但需排除开发依赖并激活生产配置:
- 若项目中添加了Spring DevTools,在
pom.xml中标记为可选依赖,确保构建时自动排除:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> </dependencies> - 构建时显式指定生产profile:
mvn clean package -Dspring.profiles.active=prod
2. 关闭开发/调试特性
在src/main/resources/application-prod.properties中添加以下配置,禁用不必要的开发功能以减少性能开销:
# 降低日志级别,减少IO输出 logging.level.root=INFO logging.level.org.springframework=WARN logging.level.com.your.package=INFO # 禁用JMX(无监控需求时关闭) spring.jmx.enabled=false # 彻底关闭DevTools热重启机制 spring.devtools.restart.enabled=false # 禁用Web错误页面的栈追踪信息 server.error.include-stacktrace=never
3. 优化JVM运行参数
JVM参数对Spring Boot性能影响极大,启动jar时添加以下参数(根据服务器硬件调整内存值):
java -Xmx2g -Xms2g \ -XX:+UseG1GC \ -XX:+TieredCompilation \ -XX:+UseCompressedOops \ -Dspring.profiles.active=prod \ -jar target/your-application.jar
Xmx/Xms:设置堆内存初始值与最大值,避免频繁GC(建议设为服务器可用内存的1/2~1/3)UseG1GC:使用低延迟的G1垃圾收集器,适配Web应用的响应式需求TieredCompilation:启用分层编译,提升JIT热点代码的编译效率UseCompressedOops:压缩对象指针,节省内存并提升内存访问速度
4. 编译阶段启用字节码优化
在pom.xml中配置Maven编译插件,开启编译优化并关闭调试符号输出:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <!-- 匹配你的Java版本(如17对应Spring Boot 3.x) --> <release>17</release> <!-- 开启字节码优化 --> <optimize>true</optimize> <!-- 关闭调试信息输出 --> <debug>false</debug> <debuglevel>none</debuglevel> </configuration> </plugin> </plugins> </build>
5. 基准测试前预热JVM
Java的JIT编译器需要预热才能将热点代码编译为机器码,正式测试前先发起至少1000次请求完成预热。例如用wrk工具:
# 预热30秒 wrk -t4 -c100 -d30s http://localhost:8080/hello # 正式测试60秒 wrk -t4 -c100 -d60s http://localhost:8080/hello
验证优化生效
启动应用后,检查日志输出是否包含:
The following 1 profile is active: "prod"
同时确认无DevTools相关日志,日志级别以INFO/WARN为主。
按照以上步骤优化后,Spring Boot的Hello World应用性能应能达到Express级(甚至更高),与Rust(Actix)的差距会缩小至3-5倍范围内。
内容的提问来源于stack exchange,提问作者kathmandui
相关产品推荐
相关产品推荐

