# 性能测试和优化建议 ## 性能测试方案 ### 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 堆内存配置 ```bash -Xms512m -Xmx1024m ``` #### 1.2 GC 策略 ```bash -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ``` #### 1.3 其他 JVM 参数 ```bash -XX:+UseStringDeduplication -XX:+OptimizeStringConcat -XX:+UseCompressedOops ``` ### 2. 数据库优化 #### 2.1 连接池配置 ```yaml spring: r2dbc: pool: initial-size: 10 max-size: 50 max-idle-time: 30s max-life-time: 60s ``` #### 2.2 查询优化 - 为常用查询字段添加索引 - 使用分页查询避免全表扫描 - 使用 R2DBC 的非阻塞特性 ### 3. 缓存优化 #### 3.1 Caffeine 缓存配置 ```yaml 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 背压处理 ```java public Mono handleRequest(ServerRequest request) { return request.bodyToMono(Request.class) .flatMap(this::processRequest) .onBackpressureBuffer(1000) .map(this::toResponse); } ``` ### 5. 网关优化 #### 5.1 连接池配置 ```yaml 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 性能测试计划 false ``` ### wrk 测试命令 ```bash wrk -t12 -c400 -d30s http://localhost:8080/api/fortune/daily ``` ## 性能优化检查清单 - [ ] JVM 参数已优化 - [ ] 数据库连接池已配置 - [ ] 缓存策略已实施 - [ ] 响应式编程最佳实践已应用 - [ ] 网关连接池已优化 - [ ] 监控和告警已配置 - [ ] 性能测试已完成 - [ ] 瓶颈已识别并优化 - [ ] 性能指标已达标