Sentinel常见问题排查指南:规则不生效、热点限流与集群流控

一、规则不生效问题排查

常见原因分析

当Sentinel规则不生效时,通常由以下原因导致:

  1. 资源名不匹配:埋点时的资源名与规则配置的资源名不一致
  2. 规则未正确加载:动态规则未成功推送到客户端
  3. 作用域问题:规则作用范围(如链路模式)与预期不符

排查步骤

// 典型资源定义示例(需与规则完全匹配)
try (Entry entry = SphU.entry("orderService")) {
    // 业务逻辑
} catch (BlockException e) {
    // 处理流控
}

检查清单

  1. 通过curl http://localhost:8719/getRules?type=flow确认已加载规则
  2. 检查控制台日志是否有规则加载失败的警告
  3. 使用DebugSlot输出资源调用的详细判断过程

实践建议

  • 使用统一命名规范(如接口全限定名+方法名)
  • 开发环境开启-Dcsp.sentinel.dashboard.server=consoleIp:8080实时查看规则
  • 通过FlowRuleManager.getRules()编程式验证规则

二、热点参数限流失效问题

核心实现机制

热点限流需要明确传递参数值,典型代码结构:

// 必须通过args显式传递参数
Entry entry = SphU.entry(resourceName, EntryType.IN, 1, orderId);
try {
    // 业务处理
} finally {
    if (entry != null) entry.exit();
}

常见问题场景

  1. 参数未传递:未按规范使用SphU.entry()的args参数
  2. 规则配置错误

    ParamFlowRule rule = new ParamFlowRule("res")
        .setParamIdx(0)  // 参数索引
        .setCount(5);    // 阈值
  3. 参数类型不匹配:规则中配置的参数索引与实际不符

调试技巧

  • 通过ParamFlowChecker类调试参数提取逻辑
  • 使用curl http://localhost:8719/paramFlow?metrics=true查看统计

三、集群流控异常处理

架构原理

图1

配置要点

  1. 服务端配置

    # 启动参数
    -Dproject.name=token-server -Dcsp.sentinel.metric.file.clean=true
  2. 客户端配置

    ClusterFlowConfig config = new ClusterFlowConfig()
        .setFlowId(123)
        .setThresholdType(1)
        .setFallbackToLocalWhenFail(true);

常见故障排查

  1. 网络连通性

    • 检查curl http://token-server:port/cluster/server/info是否可达
    • 验证端口8720是否开放
  2. 配置一致性

    • 确保所有客户端配置相同的namespaceflowId
  3. 性能问题

    • 监控Token Server的CPU和GC情况
    • 建议每台Token Server处理不超过5000QPS

生产建议

  • 部署Token Server集群时采用VIP或负载均衡
  • 设置合理的serverTransportConfig(如workerThreads)
  • 启用fallbackToLocalWhenFail避免单点故障

综合问题定位流程

图2

通过系统化的排查路径,可以快速定位大多数Sentinel异常场景。建议结合Sentinel Dashboard和metrics日志进行综合分析。

评论已关闭