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 上更改嵌入式 tomcat 版本
嵌入式 Tomcat 中带有 JSP 标签库的 Spring-Boot