帮客户看问题的时候,发现某一个接口响应耗时很慢,大概在2s左右吧,拖累了整个事务的响应,在客户的要求下帮忙做了一下分析,记录在这里,当个备份吧!
一、问题现象
某一个接口响应时间很慢快2s了,而资源消耗并不高,基本排除了接口因为CPU消耗高导致的接口响应时间慢,再说了,如果CPU消耗高,导致的接口响应慢,那应该是整个模块慢,而不是单单一个接口慢了,好了,那就祭出了我们的工具排查大法,哪里慢就找哪里。
二、排查过程
借用了某一个可视化做的比较好的工具,并且借用了配套的APM探针工具,做了一个链路追踪,是不是很明显;
定位到spring框架中Feign服务间远程调用时,使用SpringDecode.decode,在配置代码中编写了配置类,每次涉及Feign调用时,都会调用这里的new HttpMessageConverters 做初始化处理(某些组件初始化还是很消耗资源的),问题找到了,那就解决好了!
三、解决方案
代码就不贴了,截个图看个热闹吧(e.g 其实是找不到了)
最后客户采用了第二点吧,做了一次判定,httpMessageConverter 做静态处理,没有的时候在去new,基本只需要加载一次就可以,减少了调用次数
四、思考
有时候做性能测试就是这么朴实无华,解决方案要不就是绕过问题点,要不就降低调用次数,要不就是牺牲性能满足业务等等吧。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。