[TOC]
线上线下表现不一致?
1.查看日志
方式1 通过日志查看:通过 LogID 查询调用链,查看上下游调用耗时,详细查看包括上游 call log 和下游 access log
上游 call log 在实例的 /opt/tiger/toutiao/log/rpc/ 路径下,日志中包含了:
调用总耗时(cost=xx us)
建立连接耗时(conn_cost=xx us)
从连接读数据耗时(read_cost=xx us)
向连接写数据耗时(write_cost=xx us)
2.下游 access log 在实例的 /opt/tiger/toutiao/log/app/ 路径下的 p.s.m.access.log 中,包含:
- 处理总耗时(cost=xx us)
- 从连接读数据耗时(read_cost=xx us)
- 向连接写数据耗时(write_cost=xx us)
- 业务逻辑处理耗时(handler_cost=xx us)
2.开始怀疑是不是下游接口没有对。去平台调用接口。 2.确定相互的idl
3.发现没有日志。迁移实例。
(1)access 耗时逻辑 handler
(2) Mesh 的问题。
4.部分请求打基准环境。有些没打。
5.咨询Oncall。
webshell发送的请求,或者版本太低。
6.接口的idl。
上游超时,下游没有日志
此类错误都属于 RPC 调用超时,通过以下方式排查:
通过调用链或日志查看阶段耗时:
方式1 通过日志查看:通过 LogID 查询调用链,查看上下游调用耗时,详细查看包括上游 call log 和下游 access log
- 下游 access log 在实例的 /opt/tiger/toutiao/log/app/ 路径下的 p.s.m.access.log 中,包含:
- 处理总耗时(cost=xx us)
- 从连接读数据耗时(read_cost=xx us)
- 向连接写数据耗时(write_cost=xx us)
- 业务逻辑处理耗时(handler_cost=xx us)
- 下游 access log 在实例的 /opt/tiger/toutiao/log/app/ 路径下的 p.s.m.access.log 中,包含:
方式2通过Tracing查看:访问 https://pigeon.byted.org/trace/search,输入psm,可以输入耗时来过滤高耗时请求,点开要确认的psm的耗时详情,展开Logs,就可以看到如下的阶段耗时:
如果下游没 access 日志,access 日志是在业务的 handler 逻辑执行完毕后打印的(因为要统计 handler 耗时等),因此如果上游超时,而下游没有对应的 access 日志,说明代码执行卡在 handler 逻辑里了。