现象

系统的商户端出现响应慢,加载慢的问题

  • 关于慢调用问题

可能带来的危害包括:

  • 前端业务维度:首先慢调用可能会引起前端加载慢的问题,前端加载慢可能会进一步导致应用卸载率高,进而影响品牌的口碑。

  • 项目交付的维度:由于接口慢导致达不到 服务质量目标,进而导致项目延期。

  • 业务架构稳定性:当接口调用慢时,非常容易引起超时,当其他业务服务都依赖这个接口,那么就会引发大量重试,进而导致资源耗尽,最终导致部分服务或者整个服务不可用的雪崩的现象。

问题排查

  • 先排查下其他端是否也存在慢响应等问题,发现加载正常

  • 检查网关日志(orange),发现有大量status:499

    关于status code 499, client has closed connection

    代表客户端主动断开了连接,一般是服务端处理时间太长了,客户端等不了就断开了
    还有一种情况就是有人攻击,故意消耗服务端资源。

说明网关下游服务响应时间过长,网关路由到app_tenant服务

此时怀疑是不是因为app_tenant服务占用cpu过多,导致将节点cpu打满(目前app_tenant服务并没有限制cpu的resource)

app_tenant服务所在节点

节点 CPU 打满会带来什么样的问题呢?节点 CPU 打满之后,Pod 可能没办法申请到更多 CPU,导致里面的线程都处于等待调度的状态,进而导致慢调用。

1
2
3
4
5
6
7
[root@VM-30-197-centos datadisk0]# kubectl top pods -n sopei-biz|sort -nrk 2
app-tenant-74dfd8484c-rngvt 934m 501Mi
gsapi-query-logic-5774db77c7-j6xjn 587m 646Mi
gsapi-query-logic-5774db77c7-5tjr4 509m 654Mi
sapi-tenant-part-584d6958f-ctgrt 426m 425Mi

检查发现服务确实是占用大量cpu,但节点cpu资源充足,此处暂时留疑
  • 继续通过EFK,检查发生慢调用问题期间,acc链路日志中,涉及到商户端服务并且调用响应时间过长的服务

基本都是1s以上,有甚者10s以上

  • 排查下同一时间端其他日期:看来往常虽然没有大面积影响到线上使用,但是仍是个潜在问题

  • 通过traceId排查链路服务,确定耗时究竟出在哪:

发现耗时并不是app_tenant导致,而是下游sapi层,而sapi层仅负责数据库操作,响应这么慢就需要考虑数据库层面问题

  • 通过traceId排查sql日志,发现都是最近在排查的慢sql,但今天格外的多(腾讯云数据库管家却没显示慢sql,好像有延迟)

问题点整理

  1. 目前确定问题点在sapi层,且存在着较多慢查询,需要改进慢sql查询
  2. app_tenant服务存在吃cpu现象,需考虑hpa

2023-03-06更新

此次商户端出现慢调用问题后进行了同样的排查,发现问题不是出自sapi层,在此记录问题排查过程

首先由客成人员报出系统响应慢,整个过程持续了大概10分钟之久,随即按照之前的排查流程进行梳理

  • 先去核查app_tenant服务的资源占用,发现在11:00到11:08左右cpu激增
  • 再去查看网关日志,发现499错误确实持续了10分左右
  • 然后顺着traceID去查链路日志,发现每个模块都是很快就返回了,那么就可以排除是慢查询导致了

目前的处理办法是将这几分钟报出问题的接口进行review统一排查,之后整合Prometheus进行堆栈信息监控,排查问题会方便些

堆栈信息监控