针对在 2核2GB内存(2C2G) 的服务器上运行 Spring Boot 应用,以下是一些关键建议和优化策略,以确保应用稳定高效运行:
1. 基础配置优化
JVM 内存参数
- 默认配置问题:Spring Boot 默认可能占用较多内存(如堆内存初始值较高),需手动调整。
- 推荐参数(
application.yml或启动命令):java -Xms256m -Xmx768m -XX:MaxMetaspaceSize=256m -jar your-app.jar-Xms256m:初始堆内存 256MB(避免启动时占用过多)。-Xmx768m:最大堆内存 768MB(预留内存给其他进程)。-XX:MaxMetaspaceSize=256m:限制元空间(Metaspace)大小。
Tomcat 线程池
- 减少并发线程数(默认 200 可能过高):
server: tomcat: max-threads: 50 min-spare-threads: 5
2. 应用层优化
依赖精简
- 使用
spring-boot-starter-web时,排除非必要模块(如内嵌 Tomcat 可替换为 Jetty 或 Undertow):<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>- Undertow 比 Tomcat 更轻量(内存占用更低)。
禁用非必要功能
- 关闭自动配置(如不需要的模块):
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, CacheAutoConfiguration.class})
缓存与静态资源
- 启用响应压缩:
server: compression: enabled: true mime-types: text/html,text/css,application/json
3. 监控与运维
健康检查
- 使用 Spring Boot Actuator(精简端点):
management: endpoints: web: exposure: include: health,info
OOM 防护
- 添加
-XX:+ExitOnOutOfMemoryError,避免 OOM 后进程僵死。
4. 系统级优化
- Swap 分区:确保服务器启用 Swap(如 1GB),防止物理内存耗尽时崩溃。
- 容器化:若用 Docker,限制内存并启用 OOM Killer:
docker run -m 2g --memory-swap 2g your-image
5. 压测与调优
- 使用 JMeter 或 wrk 模拟流量,观察内存/CPU 使用情况。
- 根据实际负载调整
-Xmx和线程池参数。
总结
在 2C2G 服务器上,通过 JVM 调优、精简依赖、合理配置线程池 和 系统防护,Spring Boot 完全可以稳定运行中小型应用。若应用仍需更多资源,建议考虑垂直升级(如 4C4G)或水平扩展(集群部署)。
云服务器