超时大时延问题自助分析

1.Tcaplus API日志分析

Tcaplus api log日志文件和Perf日志在同一个目录下 log日志文件配置
img

1.1 Api Error日志

请业务侧注意game server请求到Tcaplus DB和Tcaplus DB回包到game server的异常,这两个阶段产生的异常导致的超时,需要业务侧监控

情况1: Api请求异常,访问请求未到达Tcaplus DB,发送失败,api接口会返回错误,打印error日志

情况2: 业务侧收包不及时,查看Tcaplus api log日志文件,看有没有 no call TcaplusServer.RecvResponse的日志 这种一般是包已经到了sdk侧,业务没有及时调用TcaplusServer.RecvResponse去收包导致的大时延 大概率是业务性能吃满,导致的卡顿,或者gdb卡顿,或者机器卡顿,业务可咨询腾讯云,或者自行定位 img

1.2 Perf日志

1.2.1 API每分钟会统计性能信息,并打印到 perf 类似命名的log中

注意3.46.0.199774.x86 64 release 20220530及以后的版本支持pref日志采集,如果sdk低于此版本,建议升级

1 代码解释代码改写#查找log :
2 find ./ *perf*.log*

1.2.2 如果没有Perf日志,请联系dba在oms上打开Perf,Perf百分比调到100

注意,修改Pref百分比配置大概5-7分钟生效,排查超时问题完成后pref百分比请改回默认值1 img

1.2.3 会按区打印汇总信息(每分钟一次)

1 ZoneStatistic:
2    [ReqSucNum]:请求成功数
3    [ReqErrNum]:请求失败数
4    [RespSucNum]: 响应成功数
5    [RespWarnNum]:响应Warnning数,一般是业务逻辑错误,像记录不存在,字段不存在
6    [RespErrNum]:响应失败数,一般是后端错误,查看Error日志
7    [SimpleReadResCount]:简单读响应数
8    [SimpleReadTimeoutNum]:简单读超时数
9    [SimpleReadAverageLatency(ms)]:简单读平均时延
10   [SimpleReadMaxLatency(ms)]: 简单读最大时延(最大时延proxyip  最大时延的命令字 最大时延时间点)
11   [SimpleWriteResCount]:简单写响应数
12   [SimpleWriteTimeoutNum]:简单写超时数
13   [SimpleWriteAverageLatency(ms)]:简单写平均时延
14   [SimpleWriteMaxLatency(ms)]:简单写最大时延(最大时延proxyip  最大时延的命令字 最大时延时间点)
15   [ComplexReadResCount]:复杂读响应数
16   [ComplexReadTimeoutNum]:复杂读超时数
17   [ComplexReadAverageLatency(ms)]:复杂读平均时延
18   [ComplexReadMaxLatency(ms)]:复杂读最大时延(最大时延proxyip  最大时延的命令字 最大时延时间点)
19   [ComplexWriteResCount]:复杂写响应数
20   [ComplexWriteTimeoutNum]:复杂写超时数
21   [ComplexWriteAverageLatency(ms)]:复杂写平均时延
22   [ComplexWriteMaxLatency(ms)]:复杂写最大时延(最大时延proxyip  最大时延的命令字 最大时延时间点)
23   [ApiFindRouteErr]:路由错误次数,api发送请求时,找不到可用的proxy
24   [ApiSendBuffFull]:网络发送buffer满错误次数
25   
26 ZonePerf:
27   [PerfRspCount(100%)]:携带perf信息的响应数,100%表示oms页面上开启的perf请求的百分比,(100%每个请求和响应都携带perf信息,由于perf会有一定的性能损耗(很小),所以oms上可以配置百分比)
28   [ApiTotal      ] api总的时延区间,10ms一下的数量,100ms以下的数量,500ms以下的数量,1000ms以下的数量,1000ms以上的数量,最大时延
29   [ApiToProxy    ] api到proxy的时延区间
30   [ProxyReqHandle] proxy处理请求的时延区间
31   [ProxyToSvr    ] proxy到svr的时延区间
32   [SvrHandle     ] svr处理的时延区间
33   [SvrToProxy    ] svr到proxy的时延区间
34   [ProxyRspHandle] proxy处理响应的时延区间
35   [ProxyToApi    ] proxy到api的时延区间

img

1.2.4 会打印该区的最大时延top3的(不超过1s)proxy的perf信息

img

1.2.5 会打印该区的最大时延超过1s的proxy的perf信息

img 根据pref日志打印的大时延日志对应的ip在tmp(网管系统 - 首页)上查询对应时间点是否网络或者机器异常

1.2.6 Go Api日志类似(v0.6.23及其以上版本)

需要开启INFO日志,并且OMS上打开开关,perf统计信息会打印在主日志中 img

1.2.7 分析实践

ApiToProxy 和 ProxyToApi 时延高,这种一般是api和proxy间的网络抖动导致,网络传输时延高,可查看tmp上的tcp重传率 ProxyToSvr 和 SvrToProxy 时延高,这种一般是proxy和svr间的网络抖动导致,网络传输时延高,可查看tmp上的tcp重传率 ProxyReqHandle 和 ProxyRspHandle 时延高,一般是proxy性能不足,可联系help定位,扩容proxy SvrHandle 时延高,一般是svr性能不足,可联系help定位,扩容svr

1.2.8 注意

所有perf信息都是简单请求的perf信息。</br>复杂请求(一应多答,listgetall,getbypartkey等等)本身比较耗时,统计复杂,参考意义不大,不会统计perf</br>ntp时间不同步可能导致perf统计不准确,ApiTotal的时间取自本地,该区间的统计是准确的

2. oms控制台查看proxy有没有大时延

自建集群环境、国内idc、dev环境,项目组用户在oms控制台查看监控视图。 腾讯云环境内部用户,请联系dba或者Tcaplus_Helper号开通相关oms控制台权限查看(腾讯云环境外部用户,请联系Tcaplus 团队查看)

旧oms: img

新oms: img

3. 联系Tcaplus_Helper人工服务号,dir上查看timeout

如果不方便看日志,perf也没开,proxy也没有大时延 此时 大概率是客户端卡顿,或者网络抖动

客户端卡顿: 查找每个dir的error日志,看有没有类似的日志 timeout request too high img

网络抖动或者proxy丢包: 看下客户端日志(搜索TraverseForeleteTimeutNode),有没有打印是哪个proxy超时,登录proxy,查看proxy是否有错误信息,查看gamesvr和proxy的tcp重传率,让腾讯云协助定位 img

results matching ""

    No results matching ""