Spring Boot 效能優化之將Servlet容器變成Undertow
需求緣起:在研究Spring Boot加速啟動的時候,發現我們在實際中,可能比較注重我們伺服器的記憶體的情況,那麼我們會想如果在啟動的時候,所佔用的記憶體越低是越好,基於這個想法,我們看看Spring Boot啟動之後的一個記憶體佔用情況。
我們看看本節的大綱:
(1)Spring Boot之Tomcat記憶體情況;
(2)Spring Boot之Undertow記憶體情況;
接下來看下具體看下每個部分的內容:
(1)SpringBoot之Tomcat記憶體情況;
我們知道,預設情況下,Spring Boot使用Tomcat來作為內嵌的Servlet容器。我們啟動專案之後可以使用VisualVM進行檢視應用所佔的記憶體情況:
(1)進入到你的jdk的安裝目錄下bin,找到:jvisualvm.exe,雙擊開啟
(2)雙擊開啟之後,你能在左邊操作欄找到【本地】--【應用程式的包名】--【雙擊開啟】:
以上是我使用Spring Boot預設的方式啟動應用後,用VisualVM監控到的記憶體佔用情況:堆記憶體佔用50M,17個執行緒被開啟。沒有比較就沒有傷害,一比較我嚇一跳,哈哈,單獨的一個tomcat是無法看出來效果的,我們看看Undertow的情況下。
(2)SpringBoot之Undertow記憶體情況;
我們將Web伺服器切換到Undertow來提高應用效能。Undertow是一個Java開發的靈活的高效能Web伺服器,提供包括阻塞和基於NIO的非阻塞機制。Undertow是紅帽公司的開源產品,是Wildfly預設的Web伺服器。首先,從依賴資訊裡移除Tomcat配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 從依賴資訊裡移除 Tomcat配置 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
然後新增Undertow:
<!-- 新增 Undertow依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
啟動專案,用VisualVM監控到的資訊顯示:堆記憶體佔用50M,16個執行緒被開啟。。
我這裡只是一個HelloWorld程式碼,實際專案中應該會更明顯。