性能调优¶
本文档提供 JAiRouter 分布式追踪系统的性能调优指南和最佳实践。
采样策略优化¶
生产环境推荐配置¶
jairouter:
tracing:
sampling:
strategy: "adaptive"
adaptive:
base-sample-rate: 0.01 # 1% 基础采样
max-traces-per-second: 100 # 限制每秒追踪数
error-sample-rate: 1.0 # 错误100%采样
slow-request-threshold: 3000 # 3秒慢请求阈值
slow-request-sample-rate: 0.5 # 慢请求50%采样
采样率动态调整¶
@Component
public class DynamicSamplingController {
@Scheduled(fixedRate = 60000) // 每分钟调整一次
public void adjustSamplingRate() {
SystemMetrics metrics = systemMonitor.getCurrentMetrics();
if (metrics.getCpuUsage() > 80) {
// 高CPU使用时降低采样率
samplingManager.updateRate(0.01);
} else if (metrics.getErrorRate() > 0.05) {
// 高错误率时提高采样率
samplingManager.updateRate(0.1);
}
}
}
内存管理优化¶
内存配置¶
jairouter:
tracing:
memory:
max-spans: 10000 # 最大Span数量
cleanup-interval: 30s # 清理间隔
span-ttl: 180s # Span生存时间
memory-threshold: 0.7 # 内存阈值
cache:
maximum-size: 50000 # 缓存最大大小
expire-after-write: 5m # 写入后过期
自动内存清理¶
@Component
public class TracingMemoryManager {
@Scheduled(fixedRate = 30000)
public void performCleanup() {
MemoryUsage usage = getMemoryUsage();
if (usage.getUsedRatio() > 0.8) {
// 清理过期 Span
int cleaned = cleanExpiredSpans();
log.info("清理了 {} 个过期 Span", cleaned);
}
}
}
异步处理优化¶
异步导出配置¶
jairouter:
tracing:
async:
enabled: true
core-pool-size: 4 # 核心线程数
max-pool-size: 16 # 最大线程数
queue-capacity: 2000 # 队列容量
exporter:
batch-size: 512 # 批处理大小
export-timeout: 10s # 导出超时
schedule-delay: 2s # 调度延迟
JVM 调优¶
推荐 JVM 参数¶
# 生产环境 JVM 参数
-Xmx4g -Xms4g # 堆内存配置
-XX:+UseG1GC # 使用 G1 垃圾收集器
-XX:MaxGCPauseMillis=200 # 最大 GC 暂停时间
-XX:+UnlockExperimentalVMOptions
-XX:+UseJVMCICompiler # 启用 JVMCI 编译器
监控指标¶
关键性能指标¶
# CPU 使用率
jairouter_tracing_cpu_usage
# 内存使用
jairouter_tracing_memory_used_bytes
# Span 处理延迟
jairouter_tracing_span_processing_duration_seconds
# 导出成功率
jairouter_tracing_export_success_rate
故障排除¶
性能问题诊断¶
- 检查采样率是否过高
- 监控内存使用情况
- 分析 GC 频率和耗时
- 检查导出器响应时间
优化建议¶
- 根据实际负载调整采样率
- 启用异步处理减少阻塞
- 定期清理过期数据
- 监控系统资源使用