spring boot相关Spring BootJava学习笔记

Spring boot start with Undertow

2016-11-10  本文已影响8132人  whthomas

UndertowJboss开发的一款基于XNIO的高性能 Web 服务器,并且兼容servlet3.1,在spring boot中很容易利用starter来替换掉tomcat作为服务容器。

pom.xml中的dependencies修改如下:

<dependencies>
    <!--Spring boot starter-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
    <!--/Spring boot starter-->
</dependencies>

HTTP2作为新的HTTP标准,目前在Undertow上已经可以被很好地支持了,而在代码中只需要配置下,就可以启用HTTP2作为web的协议:

// 在@Configuration的类中添加@bean
@Bean
UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
    
    UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
    
    // 这里也可以做其他配置
    factory.addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true));
    
    return factory;
}

与tomcat的配置不同,在application.properties中的配置:

# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
server.undertow.io-threads=4
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
server.undertow.worker-threads=20
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
server.undertow.buffer-size=1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
server.undertow.buffers-per-region=1024
# 是否分配的直接内存
server.undertow.direct-buffers=true

利用wrk在相同环境下,对tomcatundertow做了一下压力测试。发现undertow对资源的回收和利用要比tomcat好很多。

undertow的测试结果:

➜  ~ wrk -t 10 -c 10 -d 5s http://127.0.0.1:6666/main/index
Running 5s test @ http://127.0.0.1:6666/main/index
  10 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.23ms   15.43ms 232.58ms   94.60%
    Req/Sec     2.13k     1.05k    5.23k    66.33%
  105926 requests in 5.10s, 15.25MB read
Requests/sec:  20767.35
Transfer/sec:      2.99MB

tomcat的测试结果:

➜  ~ wrk -t 10 -c 10 -d 5s http://127.0.0.1:6666/main/index
Running 5s test @ http://127.0.0.1:6666/main/index
  10 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     8.46ms   21.95ms 199.08ms   90.31%
    Req/Sec     1.41k   676.65     2.87k    62.55%
  69594 requests in 5.02s, 10.23MB read
Requests/sec:  13850.99
Transfer/sec:      2.04MB

利用jconsole看到的jvm上的资源的情况:

tomcat的监控 undertow的监控
上一篇 下一篇

猜你喜欢

热点阅读