跳到主要内容

工具与排障

如何用 kitexcall 复现 RPC?​

  • kitexcall: 根据 Thrift/Protobuf IDL,用 JSON 从命令行发起 RPC;
  • 用途: 本地联调、实例直连、协议验证与最小复现;
  • 必需信息: IDL、目标地址、method、JSON request;
  • transport: Buffered、Framed、TTHeader、TTHeaderFramed; 使用前确认服务端协议;
  • Multi Service: method 使用 ServiceName/MethodName, 并选择能携带 service name 的 transport;
kitexcall -idl-path api.thrift -m UserService/GetUser `
-endpoint 127.0.0.1:8888 -d '{"id":1}'

如何逐层缩小故障范围?​

  • 契约: Client/Server 是否使用兼容 IDL 与生成版本;
  • 寻址: service name、Resolver 结果、实例地址是否正确;
  • 建连: 网络、TLS、协议、连接池与 connect timeout;
  • 调用: RPC timeout、限流、熔断、重试与业务异常;
  • Server: Handler 日志、panic stack、资源与下游依赖;
  • 系统: goroutine、heap、CPU、文件描述符与连接数;

如何从错误症状定位检查入口?​

  • ErrServiceDiscovery: Resolver/Registry 或 service name 问题;
  • ErrGetConnection: 地址、网络、协议或连接池问题;
  • ErrRPCTimeout: 先分解 discovery/connect/write/server/read,不直接调大 timeout;
  • ErrCircuitBreak: 下游错误率触发主动保护;
  • ErrOverlimit: Server 容量保护触发;
  • [happened in biz handler]: 业务 Handler panic;
  • FastWrite/FastRead panic: 常见根因是请求/响应对象被并发修改;