Sentinel问题排查指南:规则不生效、热点限流与集群流控
Sentinel常见问题排查指南:规则不生效、热点限流与集群流控
一、规则不生效问题排查
常见原因分析
当Sentinel规则不生效时,通常由以下原因导致:
- 资源名不匹配:埋点时的资源名与规则配置的资源名不一致
- 规则未正确加载:动态规则未成功推送到客户端
- 作用域问题:规则作用范围(如链路模式)与预期不符
排查步骤
// 典型资源定义示例(需与规则完全匹配)
try (Entry entry = SphU.entry("orderService")) {
// 业务逻辑
} catch (BlockException e) {
// 处理流控
}
检查清单:
- 通过
curl http://localhost:8719/getRules?type=flow
确认已加载规则 - 检查控制台日志是否有规则加载失败的警告
- 使用
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();
}
常见问题场景
- 参数未传递:未按规范使用
SphU.entry()
的args参数 规则配置错误:
ParamFlowRule rule = new ParamFlowRule("res") .setParamIdx(0) // 参数索引 .setCount(5); // 阈值
- 参数类型不匹配:规则中配置的参数索引与实际不符
调试技巧
- 通过
ParamFlowChecker
类调试参数提取逻辑 - 使用
curl http://localhost:8719/paramFlow?metrics=true
查看统计
三、集群流控异常处理
架构原理
配置要点
服务端配置:
# 启动参数 -Dproject.name=token-server -Dcsp.sentinel.metric.file.clean=true
客户端配置:
ClusterFlowConfig config = new ClusterFlowConfig() .setFlowId(123) .setThresholdType(1) .setFallbackToLocalWhenFail(true);
常见故障排查
网络连通性:
- 检查
curl http://token-server:port/cluster/server/info
是否可达 - 验证端口8720是否开放
- 检查
配置一致性:
- 确保所有客户端配置相同的
namespace
和flowId
- 确保所有客户端配置相同的
性能问题:
- 监控Token Server的CPU和GC情况
- 建议每台Token Server处理不超过5000QPS
生产建议
- 部署Token Server集群时采用VIP或负载均衡
- 设置合理的
serverTransportConfig
(如workerThreads) - 启用
fallbackToLocalWhenFail
避免单点故障
综合问题定位流程
通过系统化的排查路径,可以快速定位大多数Sentinel异常场景。建议结合Sentinel Dashboard和metrics
日志进行综合分析。
评论已关闭