【OceanBase 诊断调优】—— 如何排查 RPC 失败的原因

2024-05-13 10:52

本文主要是介绍【OceanBase 诊断调优】—— 如何排查 RPC 失败的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:OceanBase分布式数据库-海量数据 笔笔算数

本文介绍如何排查 RPC 失败的原因

问题描述

RPC 发送失败通常在日志中表现为包含 rpc***fail 字段的错误信息。

execute rpc fail(ret=-XXXX, dst="xxx.xxx.xx.xx:xxxx")
rpc ***execute fail
send rpc request fail(****ret = -XXXX)

RPC 发送失败的报错一般有 rpc****fail 字段,这样的日志最开始排查往往发现于上层模块,比如 SQL 远程 TASK 执行等。 在 Client 端 RPC 发送失败的报错,绝大部份的原因都在 dst 端,比如 dst 端处理超时,内存不够等。所以首先要找到 dst 端的地址,然后尽量找到报错上下文中的 trace id、session id、packet id、tenant id 等信息,以便于接下来到 dst 端去找线索。

排查步骤

  1. 定位目标服务器(dst端)地址。 查找日志中的 dst 字段以获取目标服务器的 IP 地址和端口。 一般最先看到的报错都是在上层,调用 rpc_proxy 的接口发 rpc 的位置。比如:

    WARN  [SQL.EXE] task_execute_v2 (ob_executor_rpc_impl.cpp:249) [85354][2358][xxxxx-xxxxx] [lt=7] [dc=0] rpc task_execute fail(ret=-4121, tenant_id=1002, svr="100.xx.xxx.xxx:7328", timeout=35992570748, timeout_timestamp=1623161884727367)
    

    上述日志中已经有 tenant id(tenant_id=1002)和 dst 端的 IP (svr="100.xx.xxx.xxx:7328")。

  2. 根据线程号寻找上下文信息。

    使用线程号或其他关键信息在 Client 端的日志文件中进行搜索,以收集更多关于出错的 RPC 请求的细节。

    本示例中,线程号为 2358,通过 grep 过滤出信息。

    grep '\[2358' -rI observer.log.[timestamp]
    

    日志包含 trace id 和 session id 信息。

    [xxxxx-xxxxx] [lt=6] [2358] send packet fail(dst="xxx.xxx.xxx.xxx:xxx", s=0x7f35064b6e80)
    

    日志包含 session id,packet id 信息。

    INFO  easy_connection.c:1783 [2358][0][xxxxx-xxxxx] [lt=23] [dc=0] Session has timed out, session(0x7fa035596920), time(9.000155s), packet_id(2903925132279), conn(xxx.xxx.xxx.xxx:xxx_xxx.xxx.xxx.xxx:xxx_xxx_0x7fa2392d2270 tp=1 t=0-1623125894988005 s=0 r=20 io=112248771/2965041847 sq=2964878955)
    
  3. 在 dst 端搜索相关线索。

    到目标服务器的日志目录下,使用 trace id、packet id 或 session id 在相应的时间戳的日志文件中查找相关线索。

    理想情况下可以根据 trace_id 在对应时间的日志中查找线索,不限于 observer.logrootservice.log 日志。命令如下所示。

    grep 'xxxxx-xxxxx' -rI [dst_dir]/observer.log.[timestamp]
    
    grep 'xxxxx-xxxxx' -rI [dst_dir]/rootservice.log.[timestamp]
    
  4. 若无日志中包含如下信息,按照 xxxxxxx 进一步排查处理。若日志中不包含如下信息,跳转到步骤 5 进一步排查。

    easy_reqeust hold by upper-layer for too much time. req(0x7f6b78155378), timeout_warn_count(0), protocol(RPC), pcode(515), time(9.360041), packet_id(68569913622796), trace_id(xxxxx-xxxxx), trace_point(5)
    
  5. 若无日志另外用 trace_id 查找不到线索或查找不到任何日志,尝试用 packet id 或者 session id 查找线索。

    grep '[packet id]' -rI [dst_dir]/observer.log.[timestamp]
    
    grep '[session id]' -rI [dst_dir]/observer.log.[timestamp]
    
    注意

    括号内要换成实际的 ID 值。

  6. 如果通过上述方法无法在 dst 端找到日志,可以根据错误码,初步判断可能的错误原因。

    例如:

    1. 4012(超时): 可能是对端的队列积压等情况。可以根据 tenant_id,继续在 dst 端查看 tenant 的队列积压情况。详细排查方法,参见 XXX。

    2. 4013(内存满等): 检查内存使用情况,可能需要优化资源使用或扩容。

适用版本

OceanBase 数据库所有版本。

这篇关于【OceanBase 诊断调优】—— 如何排查 RPC 失败的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985496

相关文章

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2