OBProxy 连接 OceanBase 偶发 4013 超时,直连 OBServer 正常,怎么排查?

测试环境遇到:应用走 OBProxy 连 OB 集群,压测时偶发 4013 超时,直连 OBServer 基本正常。

已排查:

  1. OBProxy 到 OBServer 的网络 RTT 正常、无丢包;
  2. 调大了 proxy_mem_limited、proxy_thread_num,改善不明显;
  3. obproxy_error.log 里能看到一些 server session is busy。

想请教下大家一般从哪些维度定位?是 OBProxy 的路由/连接池参数,还是后端租户资源(cpu_quota_concurrency、memstore 水位)?有没有推荐的排查顺序?

1 个赞

@论坛小助手

根据您提供的信息,您已经在测试环境中遇到了通过 OBProxy 连接到 OceanBase 时出现的 4013 超时问题,并且已经尝试了调整 proxy_mem_limited 和 proxy_thread_num 参数但改善不明显。您提到在 obproxy_error.log 中看到一些 “server session is busy” 的日志信息。以下是基于此情况的一些建议排查步骤,以及可能导致该问题的原因分析。

1. 确认网络状况

虽然您已确认从 OBProxy 到 OBServer 的 RTT 正常且没有丢包,但在高并发场景下,还需要注意是否存在瞬时性的网络波动或拥塞现象。这可以通过监控工具持续观察。

2. 检查 OBProxy 日志

除了 obproxy_error.log,建议同时检查 obproxy_diagnosis.log 文件(见文档片段 1),特别是关于超时和会话繁忙的具体日志记录。这些诊断日志可能提供更多线索,帮助确定是否为 OBProxy 侧的问题,如内存不足、线程池耗尽等状况。

3. 分析 OBProxy 配置

  • 连接池设置:检查当前使用的连接池参数,比如 max_pool_size、pool_timeout 是否合理。如果连接池过小,则可能无法支持高并发请求。
  • 超时相关配置:查看与超时相关的设置,例如 detect_server_timeout(参见最后一个文档片段), net_write_timeout(参考文档片段 4),确认其值是否合适,必要时适当调大以适应压测环境的需求。

4. 后端租户资源

  • CPU 并发限制 (cpu_quota_concurrency):确保租户配置的 CPU 并发数足够支持您的工作负载。
  • Memstore 使用情况:监控 memstore 的使用率,过高可能导致写入性能下降,间接影响客户端的感知延迟。

5. OCP 性能监控

利用 OCP 对 OBProxy 进行实时性能监控(OBProxy 性能监控),可以帮助快速识别是否存在明显的瓶颈点或者异常趋势,比如 QPS 下降、响应时间延长等情况。

6. 其他潜在因素

  • 如果上述方面均未发现问题,则需进一步考虑是否存在特定 SQL 执行慢的情况,或是由于数据分布导致跨机访问过多等因素造成的影响。

排查顺序推荐

  1. 重新审查并优化 OBProxy 的相关配置项;
  2. 深入挖掘日志文件中的详细错误消息;
  3. 监控后端租户的各项资源利用率指标;
  4. 利用 OCP 工具进行综合性能评估;
  5. 最后才转向具体的 SQL 语句层面进行分析。

希望这些建议对解决您的问题有所帮助!如果仍有疑问,请提供更详细的日志信息以便进一步探讨。

检索到的文档如下:

  1. 遇到问题如何向技术支持同学提问
  2. 启动 OBProxy
  3. ODP 端故障
  4. 连接诊断
  5. OBProxy 性能监控
  6. 产品 FAQ
  7. 如何理解逻辑连接
  8. 分析诊断&决策流程
  9. 分布式事务
  10. detect_server_timeout