您的位置:首页 > 运维架构 > Tomcat

spring boot下比较tomcat与undertow性能

2017-06-07 11:44 531 查看
第一步:

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等指标。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: