工具与排障
如何用 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: 常见根因是请求/响应对象被并发修改;