首页>>后端>>SpringBoot->接口偶现耗时突然增大,居然和Spring Boot Tomcat有关系

接口偶现耗时突然增大,居然和Spring Boot Tomcat有关系

时间:2023-11-30 本站 点击:0

背景

线上服务之间调用,偶尔会出现调用耗时突然间增大的问题,比如平常10ms的接口,一下子增加到100ms,但是去查询日志发现实际下游服务处理时间很短,面对这个问题,一度怀疑Spring Cloud相关的配置不正确,经过多次调整还是会出现这个问题。

排查

经过多次对Spring Cloud的组件的相关配置进行排查(熔断队列,线程池等),还是出现这个问题

然后小心猜测是不是网络问题,内心想k8s网络肯定没有问题,然后耐不住其它同学的一致督促,让我帮忙定位这个问题,然后还是去进行tcp dump网络抓包

经过tcp抓包发现根本不是网络的问题,建立链接很快,慢在了下游服务的

自然的就怀疑到了会不会是tomcat问题,带着心里的这个疑问,开始了对tomcat排查之旅

利用牛皮的工具Arthas,开始排查,翻阅了一些文章,有了排查入口

trace org.apache.catalina.connector.CoyoteAdapter service '#cost > 100'

2. trace org.apache.catalina.connector.CoyoteAdapter postParseRequest '#cost > 100'

一步步的排查下来,最终发现到org.apache.catalina.webresources.TomcatJarInputStream:getNextJarEntry()

这里发现trace不下去了,查阅资料发现这个方法实际上已经到达了jdk层。于是执行watch指令来观察一下getNextJarEntry这个方法

先执行options unsafe true

watch java.util.jar.JarInputStream getNextJarEntry "{returnObj}"

发现请求需要加载静态资源才导致响应时间变长,项目中引入了swagger,发现了问题所在

解决

由于引入了swagger导致了这个问题,但是项目中都是使用这个做接口文档的,所以不可能去掉,查阅了tomcat版本,目前项目中使用的是8.5.40版本和9.0.12版本,这个两个版本都有这个问题的存在

查看了tomcat的版本,更改tomcat版本,更改为8.5.70,然后再去检验,发现该问题得到解决了

还有一种方式就是升级Spring boot版本,升级依赖更高的tomcat版本Spring Boot releases 记录


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/SpringBoot/4370.html