<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
undertow,jetty和tomcat可以說是javaweb專案當下最火的三款伺服器,tomcat是apache下的一款重量級的伺服器,不用多說歷史悠久,經得起實踐的考驗。
然而:當下微服務興起,spring boot ,spring cloud 越來越熱的情況下,選擇一款輕量級而效能優越的伺服器是必要的選擇。
spring boot 完美整合了tomcat,jetty和undertow,本文將通過對jetty和undertow伺服器的分析以及測試,來比較兩款伺服器的效能如何。
值得一提的是jetty和undertow都是基於NIO實現的高並行輕量級的伺服器,支援servlet3.1和websocket。所以,有必要先了解下什麼是NIO。
Channel
Selector
Buffer
Acceptor
Client和Server只向Buffer讀寫資料不關注資料的流向,資料通過Channel通道進行流轉。而Selector是存在與伺服器端的,用於Channel的註冊以此實現資料I/O操作。Acceptor負責接受所以的連線通道並且註冊到Channel中。而整個過程使用者端與伺服器端是非阻塞的也就是非同步操作。
下面是壓力測試對比:
伺服器 | 命中 | 成功率 | 吞吐量 | 平均耗時 |
Jetty | 11488 | 100% | 96.25 trans/sec | 0.00sec |
18393 | 100% | 153.92 trans/sec | 0.01sec | |
21484 | 99.99% | 179.51 trans/sec | 0.01sec | |
Undertow | 11280 | 100% | 94.02 trans/sec | 0.00sec |
19442 | 100% | 163.35 trans/sec | 0.01sec | |
23277 | 100% | 195.54 tran/sec | 0.01sec | |
Tomcat | 10845 | 100% | 90.95 trans/sec | 0.02sec |
21673 | 99.98% | 181 trans/sec | 0.01sec | |
25084 | 99.98% | 209.10 trans/sec | 0.01sec |
從中可以看出在高負載下Undertow的吞吐量高於Jetty而且隨著壓力增大Jetty和Undertow成功率差距會拉大。而在負載不是太大情況下伺服器處理能力差不多,jetty還略微高於Undertow。而tomcat的負載能力似乎和Undertow很接近。
對比三個伺服器發現在Undertow在負載過重情況下比Jetty和Tocmat更加頑強,實踐證明在負載繼續加大情況下Undertow的成功率高於其它兩者,但是在並行不是太大情況下三款伺服器整體來看差別不大。
更新pom.xml檔案:
<!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-starter-web</artifactId>--> <!--</dependency>--> <!-- 下面的設定將使用undertow來做伺服器而不是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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
application.yml設定:
server: port: 8081 # 下面是設定undertow作為伺服器的引數 undertow: # 設定IO執行緒數, 它主要執行非阻塞的任務,它們會負責多個連線, 預設設定每個CPU核心一個執行緒 io-threads: 4 # 阻塞任務執行緒池, 當執行類似servlet請求阻塞操作, undertow會從這個執行緒池中取得執行緒,它的值設定取決於系統的負載 worker-threads: 20 # 以下的設定會影響buffer,這些buffer會用於伺服器連線的IO操作,有點類似netty的池化記憶體管理 # 每塊buffer的空間大小,越小的空間被利用越充分 buffer-size: 1024 # 是否分配的直接記憶體 direct-buffers: true
設定比較簡單,和tomcat使用基本一樣,然後就可以快樂的使用undertow啦~
看提示讓你設定一下buffer pool,不然他就使用預設的
這個警告不影響使用,但是看著彆扭,於是
根據官方檔案,和原始碼,自定義設定
/** * 功能描述: * * @author liuchaoyong * @version 1.0 * @date 2019-05-26 21:41 */ @Component public class CustomizationBean implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> { @Override public void customize(UndertowServletWebServerFactory factory) { factory.addDeploymentInfoCustomizers(deploymentInfo -> { WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 1024)); deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); }); } }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45