【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

相关文章

加载资源文件失败

背景         自己以前装了一个海康的深度学习算法平台,试用期是一个月,过了一个月之后,因为没有有效注册码或者加密狗的支持了导致无法使用,于是打算卸载掉,在卸载一个软件的时候,无论是使用控制面板还是软件自带的卸载功能,总是卸载不掉,提示“加载资源文件失败”。该软体主要包括以下两部分: 用自带卸载功能卸载的时候分别提示如下:     用控制面板卸载的时候反应很慢,最后也是提示这个

警告,恶意域名疯狂外联,原因竟然是……

前言    在某个风和日丽的下午,突然收到客户那边运维发过来的消息说我司的DTA设备在疯狂告警,说存在恶意域名外联,我急忙背上小背包前往客户现场,经过与客户协同排查,最终确定该事件为一起挖矿病毒引起的恶意域名外联事件。(因客户信息保密且为了保证文章逻辑完整性,部分截图为后期追加图) 事件分析 一看域名地址donate.v2.xmrig.com

yum install 失败报错`XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)

/export/env/py3.6/lib/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)   到/export/env/py3.6/lib cp /lib64/liblzma.so.5.2.2 . sudo ln -s -f liblzma.so.5.2.2 liblzm

VS2012加载失败

1、通过命令提示行工具进入VS安装目录下的Common7\IDE 2、执行devenv.exe /setup /resetuserdata /resetsettings 3、重启VS

微服务中RPC的强类型检查与HTTP的弱类型对比

在微服务架构中,服务间的通信是一个至关重要的环节。其中,远程过程调用(RPC)和HTTP是两种最常见的通信方式。虽然它们都能实现服务间的数据交换,但在类型检查方面,RPC的强类型检查和HTTP的弱类型之间有着显著的差异。本文将深入探讨这两种通信方式在类型检查方面的优缺点,以及它们对微服务架构的影响。 一、RPC的强类型检查 RPC的强类型检查是其核心优势之一。在RPC通信中,客户端和服务端都使

Spring 内部类获取不到@Value配置值问题排查(附Spring代理方式)

目录 一、实例问题 1、现象 2、原因 3、解决 二、Spring的代理模式 1、静态代理(Static Proxy) 1)原理 2)优缺点 3)代码实现 2、JDK动态代理(JDK Dynamic Proxy) 1)原理 2)优缺点 3)代码实现 3、cglib 代理(Code Generation Library Proxy) 1)原理 2)优缺点 3)代码实

javascript加密出问题原因

问题:js压缩和混淆都没问题,但是加密之后总是出问题,网上资料说加分号,我也加了。但是还是出问题。 参考办法: 后来我把所有if else语句里面的内容全部用{}大括号括起来并在if else语句最后加分号。然后再次加密,运行成功了。

VMWARE 安装失败 “FAILED TO CREATE THE REQUESTED REGISTRY KEY KEY

问题详情: 安装虚拟机VMWare Workstation8.0时出现“failed to create the requested registry key key installer error 1021” 解决问题: 1.在注册表(开始--运行[win+R]--输入regedit)中找到HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc. 将V

使用obdumper对oceanbase进行备份,指定2881端口

1.安装obdumper (1)下载软件 OceanBase分布式数据库-海量数据 笔笔算数https://www.oceanbase.com/softwarecenter (2)安装软件 参考:https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000000628759https://www.oceanb