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)》
Spring Boot 內(nèi)嵌容器Undertow參數(shù)設(shè)置