65 lines
3.7 KiB
Markdown
65 lines
3.7 KiB
Markdown
# 消费机“支付中”耗时诊断
|
|
|
|
食堂购买页面从发起“支付中”到请求关闭遮罩,为每次付款保存一条
|
|
`|支付耗时|` warning 摘要,其中 `event:summary` 表示本次付款汇总。
|
|
无需开启全量 INFO 日志,也不需要网关访问日志。安装包含本次改动的版本后才会产生这些记录。
|
|
|
|
## 现场取日志
|
|
|
|
1. 正常使用消费机;出现等待时记下大概时间。
|
|
2. 在消费机设置中导出当天日志,保留完整的付款前后记录。
|
|
3. 按 `trace` 聚合同一笔付款;摘要中出现 `androidOrderCode` 后,可用该号匹配 hard 模块订单 SQL。
|
|
|
|
诊断日志只增加关联编号、阶段、耗时、状态码和异常类型,不增加人员资料、令牌、付款码或图片内容。
|
|
|
|
## 付款阶段
|
|
|
|
| 字段 | 覆盖范围 |
|
|
| --- | --- |
|
|
| `discounts` | 付款时重算优惠,包括优惠 HTTP、本地读取及计算 |
|
|
| `local_order_update` | 本地订单、购物车更新 |
|
|
| `create_order` | 下单整体,包括下面的准备、请求和收尾阶段 |
|
|
| `order_prepare` | 本地配置、订单校验及读取 |
|
|
| `evidence_bind` / `evidence_version` | 本地人脸证据任务绑定和版本读取 |
|
|
| `order_http` | 下单 API 完整 Future 的等待 |
|
|
| `order_reconcile` | 请求异常后的只读订单对账 |
|
|
| `local_payment_commit` | 支付结果写回本地订单 |
|
|
| `evidence_ready` / `evidence_cancel` | 本地证据任务状态更新 |
|
|
|
|
`stagesInclusiveMs` 的单位是毫秒。父阶段包含子阶段,不能直接相加。
|
|
`totalMs` 从开始付款追踪到调用关闭遮罩并结束追踪,不包含遮罩动画和最终帧绘制完成时间。
|
|
|
|
阶段等待满 1 秒会输出一次 `event:pending`;慢阶段结束输出 `event:stage`。
|
|
每笔付款结束均输出一条摘要,异常只记录类型。
|
|
|
|
`eventLoopLagMs` 是付款期间每 250ms 定时器的最大超期调度时间。
|
|
它很大时说明 Dart 事件循环未及时获得调度,可能是同步计算或进程/设备调度停顿;
|
|
它很小时不能证明 Android 主线程、GPU 或所有原生插件都正常。
|
|
|
|
## HTTP 阶段
|
|
|
|
用户查询、优惠查询、下单及对账接口超过 1 秒,或返回失败时,额外输出
|
|
`|支付请求耗时|` warning,使用同一 `trace`(付款范围外的用户查询显示 `-`)。
|
|
|
|
| 字段 | 含义 |
|
|
| --- | --- |
|
|
| `settingsMs` | 拦截器读取本地鉴权配置的耗时 |
|
|
| `prepareMs` | 拦截器开始至交给 HTTP 适配器前的耗时,包含 settingsMs |
|
|
| `waitMs` | 发出请求后至响应/错误拦截器进入,包含连接、传输、网关、服务、解码及 Dart 调度 |
|
|
| `handlerMs` | 响应/错误拦截器内处理耗时,包括发生时的自动登录 |
|
|
| `totalMs` | 从请求拦截器开始到统一响应处理结束 |
|
|
|
|
HTTP 摘要只记录路径,不记录查询参数、请求体、响应正文、令牌或完整 URL。
|
|
`waitMs` 不能解释为纯后端耗时,也不能独立拆开网络和服务端。
|
|
|
|
## 根据下一次日志判断
|
|
|
|
- 本地阶段数秒、HTTP 很快:优先排查本地数据库、证据任务及其排队。
|
|
- HTTP 等待数秒、`eventLoopLagMs` 很小:重点对齐同一订单的服务器记录,排查完整远程请求链路。
|
|
- `settingsMs` 或 `prepareMs` 数秒:检查消费机本地设置读取及发出前处理。
|
|
- `handlerMs` 数秒:检查响应处理、登录恢复等收尾工作。
|
|
- `eventLoopLagMs` 数秒:重点排查 Dart 同步阻塞和设备/进程调度,同时结合系统日志确认原因。
|
|
|
|
本次诊断不调整扣款、重试、超时、优惠计算或证据上传顺序。支付遮罩改为在 finally
|
|
中关闭,以覆盖优惠查询或本地准备步骤意外抛错的分支。
|