【问题标题】:Spring Boot freeze for ~ 4 secondsSpring Boot 冻结约 4 秒
【发布时间】:2017-11-22 14:31:37
【问题描述】:

我正在使用 Spring Boot 来运行一个安静的 web 应用程序。它应该每秒处理 1000 个请求,但是我发现应用程序每 100 个请求大约需要 4 秒才能返回答案。我正在使用 Spring Boot 版本 1.4.4.RELEASE。

【问题讨论】:

  • 是否有一些底层资源已经饱和? IO/DB/其他? GC怎么样?
  • 没有。内存、磁盘、cpu 等看起来没问题。

标签: spring performance tomcat spring-boot


【解决方案1】:

将探查器附加到 JVM 后,我注意到其中一个 tomcat 线程正在更新它的缓存(org.apache.catalina.webresources.Cache),增加缓存 ttl 但我在不同版本的弹簧靴。

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    return new TomcatEmbeddedServletContainerFactory() {

        @Override
        protected void postProcessContext(Context context) {
            final int cacheSize = 40 * 1024; // 40 mb
            final int ttl = 10 * 60 * 1000; // 10 min

            StandardRoot standardRoot  = new StandardRoot(context);
            standardRoot.setCacheMaxSize(cacheSize);
            standardRoot.setCacheTtl(ttl);

            // try this if the jar locks
            context.setResources(standardRoot);
            StandardContext standardContext = (StandardContext) context;
            standardContext.setAntiResourceLocking(true);
        }
    };
}

将 Spring Boot 升级到 1.5.8 后,问题得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2012-10-12
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多