Spring Boot 嵌入式 Tomcat 性能

Posted

技术标签:

【中文标题】Spring Boot 嵌入式 Tomcat 性能【英文标题】:Spring Boot Embedded Tomcat Performance 【发布时间】:2017-03-12 05:15:40 【问题描述】:

我正在为我的应用程序开发微服务 API。我从 Spring Boot 应用程序开始。我创建了两个工件 - “带有嵌入式 tomcat 的业务代码”“不带嵌入式 tomcat 的业务代码”

当我比较性能结果时,我可以看到“非嵌入式 tomcat”(即在独立 tomcat 上执行)由于本机执行而提供了良好的输出。

那么基本上嵌入式 tomcat 和独立 tomcat 在实现方面有什么区别?

两次执行之间的性能有何不同?

【问题讨论】:

你是怎么做测试的?你能解释一下吗?谢谢。 @Rudge:我使用 Jmeter 模拟了两种场景的负载。我在我的业务代码中使用骆驼。在交易结束时,我正在打印消息历史记录,其中显示路线信息和执行时间。当我比较两个 secanrio 的执行时间时,嵌入式 tomcat 的平均延迟至少为 20 毫秒。 【参考方案1】:

我发现了这个问题的真正根本原因。

APR(Apache Portable Runtime)在tomcat线程执行中扮演着重要的角色。

默认情况下,嵌入式 tomcat 执行 NIO。 NIO 和 BIO 是基于 Java 的执行,而 APR 是本机执行。当我们比较 NIO 和 APR 的性能时,APR 快得多。

事实上,所有基于 Linux 的 tomcat 包都附带了 tomcat lib 文件夹下的 APR 库。

在嵌入式 tomcat(即 Spring Boot)中启用 APR 后,与独立 tomcat 相比,性能执行相同。

http://tomcat.apache.org/tomcat-7.0-doc/apr.html

【讨论】:

嗨@Peter Jerald,你能告诉我你是如何在嵌入式tomcat中启用APR的吗? @Ace.Yin 方法如下:gist.github.com/andreldm/7f89a3279438467a0bd41e6c1249d014 Peter 你能告诉我你是如何在 Spring Boot 中启用 APR 的。

以上是关于Spring Boot 嵌入式 Tomcat 性能的主要内容,如果未能解决你的问题,请参考以下文章

性能 - Spring Boot - 服务器响应时间

在 Spring Boot 上更改嵌入式 tomcat 版本

嵌入式 Tomcat 中带有 JSP 标签库的 Spring-Boot

Spring Boot嵌入式Tomcat能否访问定义的spring.tomcat.basedir的webapps文件夹

为 Spring Boot 嵌入式 tomcat 添加战争

使用 IntelliJ 部署启用嵌入式 tomcat 的 spring-boot 应用程序