一次spring boot web服务响应缓慢的排查

  使用spring boot搭建了一个web服务,部署在docker容器中。使用中出现了一个性能问题:多次接口请求中,偶尔会出现一次响应非常慢的情况。正常情况下接口的响应时间在10-20ms,偶尔会出现一次3s以上的响应。下面是自己的一个排查过程

  1、验证本地开发环境。

  首先考虑的是在本地开发环境中找出问题所在。经过测试,本地并未出现这个问题。

  2、数据库优化。

  考虑到本地开发环境和部署的版本使用的数据库不同。通过建立索引,查询优化等方案,对数据库的查询进行了优化。然而问题依旧。

  3、添加详细日志,定位问题

  首先考虑的是业务代码可能存在问题,通过分析日志,发现响应慢的并不是业务代码,而是spring boot框架中的代码。主要耗时在过滤器和拦截器中。

  4、添加gc日志

  考虑可能由于过一段时间会出现一次gc,接口也是偶尔出现一次响应慢的情况,猜测两者可能有关系。通过日志发现,响应慢的时候并不一定出现gc,并且每次gc的时间都很短,在ms级别。

  5、更换servlet容器

  spring boot内置了多个servlet容器,默认使用的是tomcat。从上面日志定位的情况来看,servlet容器可能是主要原因。把tomcat换成undertow之后,问题得以解决,响应时间都固定在10-20ms范围。

  6、为什么tomcat会出现这个问题,后续还需要分析

posted @ 2019-10-28 18:47  lwli  阅读(6515)  评论(0编辑  收藏  举报