帮客户看问题的时候,发现某一个接口响应耗时很慢,大概在2s左右吧,拖累了整个事务的响应,在客户的要求下帮忙做了一下分析,记录在这里,当个备份吧!

一、问题现象

  某一个接口响应时间很慢快2s了,而资源消耗并不高,基本排除了接口因为CPU消耗高导致的接口响应时间慢,再说了,如果CPU消耗高,导致的接口响应慢,那应该是整个模块慢,而不是单单一个接口慢了,好了,那就祭出了我们的工具排查大法,哪里慢就找哪里。
image.png
image.png

二、排查过程

image.png
20221116103952.png

  借用了某一个可视化做的比较好的工具,并且借用了配套的APM探针工具,做了一个链路追踪,是不是很明显;
  定位到spring框架中Feign服务间远程调用时,使用SpringDecode.decode,在配置代码中编写了配置类,每次涉及Feign调用时,都会调用这里的new HttpMessageConverters 做初始化处理(某些组件初始化还是很消耗资源的),问题找到了,那就解决好了!

三、解决方案

  代码就不贴了,截个图看个热闹吧(e.g 其实是找不到了)
e78b7ccfebaae269455f8f88f21a493.png
ff74f777c2aef131d86a58c90fc8146.png

  最后客户采用了第二点吧,做了一次判定,httpMessageConverter 做静态处理,没有的时候在去new,基本只需要加载一次就可以,减少了调用次数
image.png

四、思考

  有时候做性能测试就是这么朴实无华,解决方案要不就是绕过问题点,要不就降低调用次数,要不就是牺牲性能满足业务等等吧。


废了
1 声望1 粉丝