spring boot下比较tomcat与undertow性能

xiaoxiao2021-02-28  84

第一步: pom.xml配置 如果使用tomcat服务器,则配置如下:  <dependencies>           <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-tomcat</artifactId>            <scope>provided</scope>      </dependency>  </dependencies> 如果使用undertow服务器,则配置如下:因为spring boot默认配置为tomcat: <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>         <!-- 若使用log4j2 -->         <exclusions> <exclusion>                           <groupId>org.springframework.boot</groupId>                          <artifactId>spring-boot-starter-tomcat</artifactId>                         </exclusion>  </exclusions>     </dependency> 再添加dependency依赖:  <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-undertow</artifactId> 第二步,再在定制tomcat/undertow服务器 /**  *   */ package com.lz.ovuola.general.util.tomcat; import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /**  * 编程方式自定义内嵌容器  *   * @author fz  *  */ @Configuration @ConfigurationProperties(prefix = "tomcat") public class CustomTomcatEmbeddedCustomizer { private int maxThreads; private int minSpareThreads; private int acceptCount; private int connectionTimeout; private String URIEncoding = "UTF-8"; private boolean disableUploadTimeout; private boolean enableLookups; private String compression; private int compressionMinSize; private String compressableMimeType; /** * 订制内嵌tomcat容器 */ @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.addConnectorCustomizers(new MyTomcatConnectorCustomizer()); return factory; } class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer { public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector .getProtocolHandler(); // 设置最大连接数 protocol.setMaxThreads(maxThreads); protocol.setConnectionTimeout(connectionTimeout); protocol.setMinSpareThreads(minSpareThreads); protocol.setAcceptorThreadCount(acceptCount); protocol.setDisableUploadTimeout(disableUploadTimeout); protocol.setCompression(compression); protocol.setCompressionMinSize(compressionMinSize); protocol.setCompressableMimeType(compressableMimeType); // connector.setURIEncoding(URIEncoding); connector.setEnableLookups(enableLookups); } } public int getMaxThreads() { return maxThreads; } public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; } public int getMinSpareThreads() { return minSpareThreads; } public void setMinSpareThreads(int minSpareThreads) { this.minSpareThreads = minSpareThreads; } public int getAcceptCount() { return acceptCount; } public void setAcceptCount(int acceptCount) { this.acceptCount = acceptCount; } public int getConnectionTimeout() { return connectionTimeout; } public void setConnectionTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; } public String getURIEncoding() { return URIEncoding; } public void setURIEncoding(String uRIEncoding) { URIEncoding = uRIEncoding; } public boolean isDisableUploadTimeout() { return disableUploadTimeout; } public void setDisableUploadTimeout(boolean disableUploadTimeout) { this.disableUploadTimeout = disableUploadTimeout; } public boolean isEnableLookups() { return enableLookups; } public void setEnableLookups(boolean enableLookups) { this.enableLookups = enableLookups; } public String getCompression() { return compression; } public void setCompression(String compression) { this.compression = compression; } public int getCompressionMinSize() { return compressionMinSize; } public void setCompressionMinSize(int compressionMinSize) { this.compressionMinSize = compressionMinSize; } public String getCompressableMimeType() { return compressableMimeType; } public void setCompressableMimeType(String compressableMimeType) { this.compressableMimeType = compressableMimeType; } } 或者是 undertow,测试只要启动一个就行 //package com.lz.ovuola.general.util.tomcat; // //import io.undertow.Undertow.Builder; // //import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; //import org.springframework.boot.context.embedded.undertow.UndertowBuilderCustomizer; //import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory; //import org.springframework.boot.context.properties.ConfigurationProperties; //import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration; // //@Configuration //public class CustomUndertowEmbeddedCustomizer { // // @Bean // public EmbeddedServletContainerFactory servletContainer() { // UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory(); // factory.addBuilderCustomizers(new UndertowBuilderCustomizer() { // // @Override // public void customize(Builder builder) { // builder.addHttpListener(8080, "127.0.0.1"); // } // // }); // return factory; // } // // } 第三步,在application -runAs -run as configuratuion-Arguments添加:--用于jconsole或者是visualVM监控,推荐使用后者 -Djava.rmi.server.hostname=127.0.0.1   --ip地址 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9093"   --端口号 -Dcom.sun.management.jmxremote.authenticate="false" 第四步,采用visualVM监控同一个服务,分别开启tomcat/undertow容器,注意两者在application.propertites参数尽量相同,以便观察稳定性 第5步,打开jemter压力测试某一接口,观察堆内存、线程数、cpu等指标。
转载请注明原文地址: https://www.6miu.com/read-39837.html

最新回复(0)