# 结伴客Java后端性能优化指南 ## 1. JVM调优 ### 1.1 堆内存设置 ``` # 堆内存大小设置(根据服务器配置调整) -Xms512m -Xmx2g # 新生代大小设置 -Xmn256m # Metaspace大小设置 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m ``` ### 1.2 垃圾回收器选择 ``` # G1垃圾回收器(适用于大堆内存) -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=16m # 或者CMS垃圾回收器(适用于低延迟要求) -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 ``` ## 2. 数据库连接池优化 ### 2.1 HikariCP配置(在application.yml中) ```yaml spring: datasource: hikari: # 连接池大小 maximum-pool-size: 20 # 最小空闲连接数 minimum-idle: 5 # 连接超时时间 connection-timeout: 30000 # 空闲超时时间 idle-timeout: 600000 # 最大生命周期 max-lifetime: 1800000 # 连接测试查询 connection-test-query: SELECT 1 ``` ## 3. Redis性能优化 ### 3.1 Redis连接池配置 ```yaml spring: redis: lettuce: pool: # 最大连接数 max-active: 20 # 最大空闲连接数 max-idle: 10 # 最小空闲连接数 min-idle: 5 # 获取连接最大等待时间 max-wait: 2000ms ``` ### 3.2 Redis序列化优化 ```java @Bean public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); // 使用更高效的序列化方式 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } ``` ## 4. RabbitMQ性能优化 ### 4.1 连接池配置 ```yaml spring: rabbitmq: listener: simple: # 并发消费者数量 concurrency: 5 # 最大并发消费者数量 max-concurrency: 20 # 每个消费者预取的消息数量 prefetch: 10 ``` ## 5. Feign客户端优化 ### 5.1 Feign配置 ```java @Configuration public class FeignConfig { @Bean public Request.Options options() { // 连接超时时间和读取超时时间 return new Request.Options(5000, 10000); } @Bean public Retryer retryer() { // 重试策略 return new Retryer.Default(1000, 2000, 3); } } ``` ## 6. 线程池优化 ### 6.1 自定义线程池 ```java @Configuration public class ThreadPoolConfig { @Bean("taskExecutor") public ExecutorService taskExecutor() { return new ThreadPoolExecutor( 10, // 核心线程数 20, // 最大线程数 60L, // 空闲线程存活时间 TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), // 任务队列 new ThreadFactoryBuilder().setNameFormat("task-pool-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略 ); } } ``` ## 7. 缓存策略优化 ### 7.1 多级缓存设计 ```java @Service public class UserService { @Autowired private RedisTemplate redisTemplate; // 本地缓存(Caffeine) private Cache localCache = Caffeine.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .build(); public User getUserById(Long userId) { // 1. 先查本地缓存 User user = (User) localCache.getIfPresent("user:" + userId); if (user != null) { return user; } // 2. 再查Redis缓存 user = (User) redisTemplate.opsForValue().get("user:" + userId); if (user != null) { localCache.put("user:" + userId, user); return user; } // 3. 最后查数据库 user = userMapper.selectById(userId); if (user != null) { redisTemplate.opsForValue().set("user:" + userId, user, 30, TimeUnit.MINUTES); localCache.put("user:" + userId, user); } return user; } } ``` ## 8. 数据库查询优化 ### 8.1 MyBatis-Plus分页优化 ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } } ``` ### 8.2 索引优化建议 ```sql -- 用户表索引优化 CREATE INDEX idx_user_phone ON users(phone); CREATE INDEX idx_user_email ON users(email); CREATE INDEX idx_user_status ON users(status); -- 旅行表索引优化 CREATE INDEX idx_travel_creator ON travels(creator_id); CREATE INDEX idx_travel_status ON travels(status); CREATE INDEX idx_travel_start_time ON travels(start_time); -- 动物表索引优化 CREATE INDEX idx_animal_shelter ON animals(shelter_id); CREATE INDEX idx_animal_status ON animals(status); -- 订单表索引优化 CREATE INDEX idx_order_user ON orders(user_id); CREATE INDEX idx_order_status ON orders(status); CREATE INDEX idx_order_create_time ON orders(create_time); ``` ## 9. API网关优化 ### 9.1 限流配置 ```yaml spring: cloud: gateway: routes: - id: user-service uri: lb://user-service predicates: - Path=/api/users/** filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20 ``` ## 10. 监控和日志优化 ### 10.1 Actuator配置 ```yaml management: endpoints: web: exposure: include: health,info,metrics,httptrace endpoint: health: show-details: always ``` ### 10.2 日志配置优化 ```yaml logging: level: com.jiebanke: INFO org.springframework: WARN org.mybatis: WARN pattern: console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" file: name: logs/application.log ``` ## 11. Docker部署优化 ### 11.1 JVM参数优化(Dockerfile) ```dockerfile FROM openjdk:17-jdk-slim LABEL maintainer="jiebanke-team" WORKDIR /app COPY target/*.jar app.jar # JVM参数优化 ENV JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200" EXPOSE 8080 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] ``` ## 12. 负载均衡优化 ### 12.1 Ribbon配置 ```yaml ribbon: # 连接超时时间 ConnectTimeout: 3000 # 读取超时时间 ReadTimeout: 10000 # 是否启用重试 OkToRetryOnAllOperations: false # 切换实例重试次数 MaxAutoRetriesNextServer: 1 # 当前实例重试次数 MaxAutoRetries: 0 ``` ## 13. 性能测试建议 ### 13.1 压力测试工具 - JMeter:用于API接口压力测试 - wrk:用于HTTP基准测试 - ab (Apache Bench):简单的HTTP性能测试工具 ### 13.2 监控工具 - Prometheus + Grafana:系统指标监控 - ELK Stack:日志分析 - SkyWalking:分布式追踪 通过以上优化措施,可以显著提升结伴客Java后端服务的性能和稳定性。