# 性能优化
# 需求
最近项目验收,有个验收指标是接口支持1000并发,前端响应延迟5秒以内。
最早的接口是nodejs写的,单线程,最多支持100并发左右。于是采用springboot框架改造
# 性能测试
# Apifox
Apifox免费,支持自动化测试,配制好接口参数后,最多支持100并发性能测试
# Jmeter
Jmeter是更专业的工具,免费开源,最多支持数量无限制。支持多种协议,多种测试逻辑,前置操作、后置操作等等。
# 性能优化措施
# redis配置
# 缓存配置
redis:
database: 0
# 地址
host: 127.0.0.1
# 端口
port: 6379
# 接口超时控制
timeout: 300ms
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 30
# 连接池中的最大空闲连接
max-idle: 120
# 连接池的最大数据库连接数
max-active: 200
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: 50ms
shutdown-timeout: 50ms
# 数据库配置
# 👇 高并发核心配置(必须加)
maximum-pool-size: 40 # 最大连接(扛1000并发)
minimum-idle: 15 # 最小空闲
idle-timeout: 60000 # 空闲超时
max-lifetime: 1800000 # 连接最大寿命
connection-timeout: 500 # 获取连接超时 500ms(关键!)
validation-timeout: 1000
# 运行时内存
java -Xms16G -Xmx16G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar
# tomcat 线程
# web配置
server:
port: 8151
tomcat:
threads:
core: 400 # 核心线程
max: 600 # 最大线程(翻倍)
accept-count: 400 # 排队长度(翻倍)
# 结论
测试时间120s
500并发,ramp-up 30秒,平均延迟990ms ,错误率0.97%
1000并发,ramp-up 60秒,平均延迟1668ms, 错误率2.83%
并发超过500,错误率就上来了。
优化添加配置后,平均延迟和错误率还是降不下来
1000并发,ramp-up 60秒,平均延迟1684ms, 错误率2.45%
加上了分布式锁,作用不大
500并发,ramp-up 60秒,平均延迟885ms ,错误率0.61% 有所下降
1000并发,ramp-up 60秒,平均延迟1688ms, 错误率2.51% 没啥效果
完全返回固定值,还是很慢
1000并发,ramp-up 45秒,平均延迟1739ms, 错误率4.33% 还不如用缓存呢
← 常用命令行