在开发Spring Boot网站时,性能优化涵盖Java应用、操作系统、Java虚拟机(JVM)等多个层面。下面将从Spring Boot应用层、Linux系统、JVM参数等方面,详细介绍优化方案,同时阐述操作系统差异处理、验证与监控以及注意事项。
通过以下多层级优化组合,可实现从应用代码到系统底层的整体性能提升。建议依据实际监控数据持续调优,不同场景侧重不同优化方向。
一、Spring Boot应用层优化
代码层面优化
- 缓存与异步处理:使用缓存注解(如 @Cacheable )减少数据库查询,示例如下:
java">@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) { // 具体逻辑
}
对耗时操作采用异步处理( @Async ):
java">@Async
public void processTaskAsync() { // 具体逻辑
}
- 连接池与操作优化:使用连接池(HikariCP默认已优化),避免循环内数据库操作,改用批量查询。启用压缩,在配置文件中设置 server.compression.enabled=true 。
数据库优化
- 索引与分库分表:添加索引(覆盖索引优化),采用分库分表策略(如ShardingSphere)。
- 连接池参数配置:在 application.yml 中配置连接池参数,例如:
spring:datasource:hikari:maximum-pool-size: 20connection-timeout: 3000
Web容器优化
使用Undertow替代Tomcat,并在 application.yml 中配置相关参数:
server:undertow:worker-threads: 200buffer-size: 1024direct-buffers: true
监控配置
在 application.yml 中配置监控相关参数:
management:endpoints:web:exposure:include: "*"metrics:tags:application: ${spring.application.name}
此外,还需减少不必要的依赖和包,使用 spring-boot-starter 避免不必要依赖加载;配置Spring Boot压缩和缓存静态资源,使用CDN或反向代理加速加载;在生产环境减少日志详细度,避免日志过度输出导致IO性能瓶颈。
二、Linux系统优化(Arch/CentOS通用)
内核参数优化
在 /etc/sysctl.conf 中配置:
# 网络连接优化
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30# 内存管理
vm.swappiness = 10
vm.overcommit_memory = 1# 文件系统
fs.file-max = 2097152
系统限制调整
在 /etc/security/limits.conf 中配置:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
磁盘IO优化
对于机械硬盘,使用deadline调度器:
echo deadline > /sys/block/sda/queue/scheduler
对于SSD,使用noop调度器:
echo noop > /sys/block/nvme0n1/queue/scheduler
另外,Arch Linux下启用 noatime 和 nodiratime 选项减少磁盘访问,CentOS Linux下配置防火墙规则减少不必要连接和过滤,禁用不必要服务减少资源消耗。
三、JVM参数优化
基础参数配置
JDK17+推荐配置如下:
java -jar \
-Xms4g -Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:ParallelGCThreads=4 \
-XX:ConcGCThreads=2 \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+AlwaysPreTouch \
-XX:+UseStringDeduplication \
-XX:+UseNUMA \
-Djava.security.egd=file:/dev/./urandom \
myapp.jar
GC选择策略
- G1 GC(通用场景): -XX:+UseG1GC -XX:G1HeapRegionSize=32m
- ZGC(低延迟): -XX:+UseZGC -Xmx16g
- Shenandoah(平衡型): -XX:+UseShenandoahGC
内存分析工具
生成内存快照:
jmap -dump:live,format=b,file=heapdump.hprof <pid>
实时监控:
jstat -gcutil <pid> 1000
此外,还需设置合理JVM堆内存大小,配置GC日志分析垃圾回收情况,使用JVM工具监控性能,调整垃圾回收相关参数,开启JVM压缩指针减少堆内存占用,根据并发情况调整JVM线程池大小。
四、操作系统差异处理
优化项 Arch Linux CentOS 7+
配置持久化 /etc/sysctl.d/99-tuning.conf /etc/sysctl.conf
服务管理 systemctl daemon-reload service network restart
内核升级 pacman -S linux-lts yum install kernel-lt
性能工具 perf/htop tuned-adm profile throughput
五、验证与监控
压力测试工具
使用 wrk 进行压力测试:
wrk -t12 -c400 -d30s http://localhost:8080/api
监控体系
采用Prometheus + Grafana监控系统/JVM指标,Arthas实时诊断Java进程,NetData实现系统资源可视化。同时定期使用Prometheus、Grafana、New Relic等监控工具监控应用性能。
六、注意事项
- 生产环境逐步验证参数调整效果。
- 每次只修改一个参数进行对比测试。
- 保持系统与JDK版本更新(推荐LTS版本)。
- 容器化部署时需调整cgroup限制参数。