Spring Boot 内嵌容器Undertow取代tomcat

undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,当下微服务兴起,spring boot ,spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。spring boot 完美集成了tomcat,jetty和undertow。

性能比较:
Undertow,Tomcat和Jetty服务器配置详解与性能测试

1. SpringBoot引入依赖

    
        
            org.springframework.boot
            spring-boot-starter-web
            
                
                    org.springframework.boot
                    spring-boot-starter-tomcat
                
            
        
        
            org.springframework.boot
            spring-boot-starter-undertow
        

2. 相关配置

server:
  port: 8011
  undertow:
    # 设置 HTTP POST 内容的最大长度,默认不做限制
    ## max-http-post-size: -1
    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程,数量和CPU 内核数目一样即可
    io-threads: 8
    # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载  io-threads*8
    worker-threads: 64
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小,越小的空间被利用越充分
    buffer-size: 1024
    # 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
    #   buffers-per-region: 1024 # 这个参数不需要写了
    # 是否分配的直接内存
    direct-buffers: true

3. Undertow线程数的配置

Undertow认为它的运用场景是在IO密集型的系统应用中,并且认为多核机器是一个比较容易满足的点,Undertow初始化假想应用的阻塞系数在0.8~0.9之间,所以阻塞线程数直接乘了个8,当然,如果对应用较精确的估测阻塞系数,可以配置上去,

ioThreads = Math.max(Runtime.getRuntime().availableProcessors(), 2);
workerThreads = ioThreads * 8;

如果项目运行一段时间后发现http存在超时或者获取http连接比较耗时的情况,可以适当的加大workerThreads线程配置。

推荐阅读

后续之《SpringBoot服务器压测对比(jetty、tomcat、undertow)》

undertow在github的源码

Spring Boot 内嵌容器Undertow参数设置

Spring boot 中 Undertow 配置线程数

线程数设多少合适??

Docker环境Spring Boot应用undertow大量http请求超时

你可能感兴趣的:(Spring Boot 内嵌容器Undertow取代tomcat)