[英]Spring Boot Embedded Tomcat Performance
我正在为我的应用程序开发微服务 API。 我从 Spring Boot 应用程序开始。 我创建了两个工件—— “带有嵌入式 tomcat 的业务代码”和“不带嵌入式 tomcat 的业务代码” 。
当我比较性能结果时,我可以看到“非嵌入式 tomcat”(即在独立 tomcat 上执行)由于本机执行而提供了良好的输出。
那么基本上嵌入式tomcat和独立tomcat在实现方面有什么区别?
两次执行之间的性能如何变化?
我发现了这个问题的实际根本原因。
APR(Apache Portable Runtime)在tomcat线程执行中扮演着重要的角色。
默认情况下,嵌入式 tomcat 执行 NIO。 NIO 和 BIO 是基于 Java 的执行,而 APR 是本机执行。 当我们比较 NIO 和 APR 的性能时,APR 快得多。
事实上,所有基于 Linux 的 tomcat 包都在 tomcat lib 文件夹下随 APR 库一起提供。
在我在嵌入式 tomcat(即 Spring Boot)中启用 APR 后,与独立 tomcat 相比,性能执行是相同的。
我们可以通过覆盖 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory 并使用 org.apache.coyote.http11.Http11AprProtocol 协议提供新的 org.apache.catalina.connector.Connector 在 springboot 嵌入式 tomcat 中启用 APR。
下面的代码可能有助于完成它。
@Bean
public TomcatServletWebServerFactory servletContainerFactoryProd() {
TomcatServletWebServerFactory tomcat = new
TomcatServletWebServerFactory() {
@Override
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
// to create new directories and files and add them to Context
return super.getTomcatWebServer(tomcat);
}
};
Connector connector = new Connector("org.apache.coyote.http11.Http11AprProtocol");
Http11AprProtocol protocol = (Http11AprProtocol) connector.getProtocolHandler();
connector.setProperty("compression", "on");
// can also enable ssl and provide certificate details
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.