在項目中,我們曾用jemter對 `tomcat`與`undertow`進行了同等的壓力測試,后發現,`undertow`比`tomcat` 的吞吐量應該要高20%,所以,我們選擇了`undertow`作為我們的Serlvet容器,`undertow` 是紅帽公司開發的一款基于 NIO 的高性能 Web 嵌入式服務器,這也是SpringBoot中所推薦使用的服務容器,相比其他的服務器他更加輕量級,但在默認的情況下,SpringBoot內嵌了`tomcat`服務器,所有需要先將`tomcat`進行移除。
1.在pom.xml移除`tomcat`的依賴
```
<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>
```
2.添加Untertow 依賴
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
```
3.在application.yml中對`undertow`來進行配置。
經過我們內部的測試,擁有200個線程的api項目在 i3 8100上是比較合理的,服務器隨cpu性能強弱修改線程數量
```
server:
undertow:
worker-threads: 200
```
undertow還有很多的配置項,大家可以根據需要來進行配置。
```
# 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個連接, 默認設置每個CPU核心一個線程
# 不要設置過大,如果過大,啟動項目會報錯:打開文件數過多
server.undertow.io-threads=16
# 阻塞任務線程池, 當執行類似servlet請求阻塞IO操作, undertow會從這個線程池中取得線程
# 它的值設置取決于系統線程執行任務的阻塞系數,默認值是IO線程數*8
server.undertow.worker-threads=256
# 以下配置會影響buffer,這些buffer會用于服務器連接的IO操作,有點類似netty的池化內存管理
# 每塊buffer的空間大小,越小的空間被利用越充分,不要設置太大,以免影響其他應用,合適即可
server.undertow.buffer-size=1024
# 每個區分配的buffer數量 , 所以pool的大小是buffer-size * buffers-per-region
server.undertow.buffers-per-region=1024
# 是否分配的直接內存(NIO直接分配的堆外內存)
server.undertow.direct-buffers=true
```
- 開發環境準備
- 基本開發手冊
- 項目目錄結構
- 權限管理
- 通用分頁表格
- Swagger文檔
- undertow容器
- 對xss攻擊的防御
- 分布式鎖
- 統一的系統日志
- 統一驗證
- 統一異常處理
- 文件上傳下載
- 一對多、多對多分頁
- 認證與授權
- 從授權開始看源碼
- 自己寫個授權的方法-開源版
- 商城表設計
- 商品信息
- 商品分組
- 購物車
- 訂單
- 地區管理
- 運費模板
- 接口設計
- 必讀
- 購物車的設計
- 訂單設計-確認訂單
- 訂單設計-提交訂單
- 訂單設計-支付
- 生產環境
- nginx安裝與跨域配置
- 安裝mysql
- 安裝redis
- 傳統方式部署項目
- docker
- 使用docker部署商城
- centos jdk安裝
- docker centos 安裝
- Docker Compose 安裝與卸載
- docker 鏡像的基本操作
- docker 容器的基本操作
- 通過yum安裝maven
- 常見問題