Spring Boot 內(nèi)嵌容器Undertow取代tomcat

undertow,jetty和tomcat可以說是javaweb項目當(dāng)下最火的三款服務(wù)器,當(dāng)下微服務(wù)興起,spring boot ,spring cloud 越來越熱的情況下,選擇一款輕量級而性能優(yōu)越的服務(wù)器是必要的選擇。spring boot 完美集成了tomcat,jetty和undertow。

性能比較:
Undertow,Tomcat和Jetty服務(wù)器配置詳解與性能測試

1. SpringBoot引入依賴

    <dependencies>
        <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>

2. 相關(guān)配置

server:
  port: 8011
  undertow:
    # 設(shè)置 HTTP POST 內(nèi)容的最大長度,默認(rèn)不做限制
    ## max-http-post-size: -1
    # 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會負(fù)責(zé)多個連接, 默認(rèn)設(shè)置每個CPU核心一個線程,數(shù)量和CPU 內(nèi)核數(shù)目一樣即可
    io-threads: 8
    # 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類似servlet請求阻塞操作, undertow會從這個線程池中取得線程,它的值設(shè)置取決于系統(tǒng)的負(fù)載  io-threads*8
    worker-threads: 64
    # 以下的配置會影響buffer,這些buffer會用于服務(wù)器連接的IO操作,有點類似netty的池化內(nèi)存管理
    # 每塊buffer的空間大小,越小的空間被利用越充分
    buffer-size: 1024
    # 每個區(qū)分配的buffer數(shù)量 , 所以pool的大小是buffer-size * buffers-per-region
    #   buffers-per-region: 1024 # 這個參數(shù)不需要寫了
    # 是否分配的直接內(nèi)存
    direct-buffers: true

3. Undertow線程數(shù)的配置

Undertow認(rèn)為它的運用場景是在IO密集型的系統(tǒng)應(yīng)用中,并且認(rèn)為多核機器是一個比較容易滿足的點,Undertow初始化假想應(yīng)用的阻塞系數(shù)在0.8~0.9之間,所以阻塞線程數(shù)直接乘了個8,當(dāng)然,如果對應(yīng)用較精確的估測阻塞系數(shù),可以配置上去,

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

如果項目運行一段時間后發(fā)現(xiàn)http存在超時或者獲取http連接比較耗時的情況,可以適當(dāng)?shù)募哟?code>workerThreads線程配置。

推薦閱讀

后續(xù)之《SpringBoot服務(wù)器壓測對比(jetty、tomcat、undertow)》

undertow在github的源碼

Spring Boot 內(nèi)嵌容器Undertow參數(shù)設(shè)置

Spring boot 中 Undertow 配置線程數(shù)

線程數(shù)設(shè)多少合適??

Docker環(huán)境Spring Boot應(yīng)用undertow大量http請求超時

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容