打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
spring boot下比较tomcat与undertow性能

spring boot下比较tomcat与undertow性能

2017年06月07日 11:44:52
阅读数:8073
第一步:
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://blog.csdn.net/u013059432/article/details/72898138
个人分类: springboot性能优化
▼查看关于本篇文章更多信息
想对作者说点什么? 我来说一句
老教授说:教你一招解决床上问题,千万要记住这个方法! 番当生物 · 顶新
饭后用它泡水喝,瘦的太快!网友惊呼没想到 舜飞
老中医说:饭后用一物,体重瘦到90斤! 舜飞
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Undertow技术:为什么很多Spring Boot开发者放弃了Tomcat
Spring Boot教程
Undertow中间件
Spring Boot :Undertow
Jetty、Undertow容器及war包部署到外置Tomcat容器
Spring Boot 实践折腾记(六):Spring Boot中的容器配置和SSL支持
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服