08ea5fbe98
添加用户管理视图、API和状态管理文件
4.3 KiB
4.3 KiB
性能测试和优化建议
性能测试方案
1. 测试工具
- JMeter: 用于压力测试和负载测试
- Gatling: 用于高级性能测试和场景模拟
- wrk: 用于简单的 HTTP 基准测试
2. 测试场景
2.1 客户端应用性能测试
- 用户登录: 测试登录接口的并发处理能力
- 用户注册: 测试注册接口的并发处理能力
- 命理查询: 测试命理查询接口的响应时间
- 批量查询: 测试批量命理查询的性能
2.2 后台管理应用性能测试
- 用户列表: 测试用户列表查询性能
- 统计数据: 测试统计数据查询性能
- 权限验证: 测试 RBAC 权限验证性能
2.3 网关性能测试
- 路由转发: 测试网关路由转发性能
- JWT 验证: 测试 JWT 认证过滤器性能
- RBAC 验证: 测试 RBAC 权限过滤器性能
3. 性能指标
| 指标 | 目标值 | 说明 |
|---|---|---|
| 响应时间 (P95) | < 200ms | 95% 的请求响应时间 |
| 响应时间 (P99) | < 500ms | 99% 的请求响应时间 |
| 吞吐量 | > 1000 TPS | 每秒处理事务数 |
| 错误率 | < 0.1% | 请求错误率 |
| CPU 使用率 | < 70% | CPU 使用率 |
| 内存使用率 | < 80% | 内存使用率 |
性能优化建议
1. JVM 优化
1.1 堆内存配置
-Xms512m -Xmx1024m
1.2 GC 策略
-XX:+UseG1GC -XX:MaxGCPauseMillis=200
1.3 其他 JVM 参数
-XX:+UseStringDeduplication
-XX:+OptimizeStringConcat
-XX:+UseCompressedOops
2. 数据库优化
2.1 连接池配置
spring:
r2dbc:
pool:
initial-size: 10
max-size: 50
max-idle-time: 30s
max-life-time: 60s
2.2 查询优化
- 为常用查询字段添加索引
- 使用分页查询避免全表扫描
- 使用 R2DBC 的非阻塞特性
3. 缓存优化
3.1 Caffeine 缓存配置
spring:
cache:
type: caffeine
caffeine:
spec: maximumSize=1000,expireAfterWrite=5m,recordStats
3.2 缓存策略
- 用户信息: 缓存 5 分钟
- 命理结果: 缓存 10 分钟
- 统计数据: 缓存 1 分钟
4. 响应式优化
4.1 非阻塞 I/O
- 使用 WebFlux 的非阻塞特性
- 使用 R2DBC 的响应式数据库访问
- 避免在响应式流中使用阻塞操作
4.2 背压处理
public Mono<ServerResponse> handleRequest(ServerRequest request) {
return request.bodyToMono(Request.class)
.flatMap(this::processRequest)
.onBackpressureBuffer(1000)
.map(this::toResponse);
}
5. 网关优化
5.1 连接池配置
spring:
cloud:
gateway:
httpclient:
connect-timeout: 5000
response-timeout: 30s
pool:
max-connections: 500
max-idle-time: 30s
5.2 路由优化
- 使用路径前缀匹配
- 避免复杂的正则表达式
- 使用缓存路由信息
6. 监控和告警
6.1 Actuator 端点
/actuator/health: 健康检查/actuator/metrics: 性能指标/actuator/prometheus: Prometheus 指标
6.2 关键指标
- jvm.memory.used: JVM 内存使用
- http.server.requests: HTTP 请求指标
- cache.size: 缓存大小
- cache.puts: 缓存写入次数
- cache.hits: 缓存命中次数
6.3 告警规则
- CPU 使用率 > 80%
- 内存使用率 > 90%
- 响应时间 P95 > 500ms
- 错误率 > 1%
性能测试脚本示例
JMeter 测试计划
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2">
<hashTree>
<TestPlan>
<stringProp name="TestPlan.comments">性能测试计划</stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<elementProp name="TestPlan.user_defined_variables">
<collectionProp name="Arguments.arguments"/>
</elementProp>
</TestPlan>
</hashTree>
</jmeterTestPlan>
wrk 测试命令
wrk -t12 -c400 -d30s http://localhost:8080/api/fortune/daily
性能优化检查清单
- JVM 参数已优化
- 数据库连接池已配置
- 缓存策略已实施
- 响应式编程最佳实践已应用
- 网关连接池已优化
- 监控和告警已配置
- 性能测试已完成
- 瓶颈已识别并优化
- 性能指标已达标