1. 程式人生 > >Spring Boot 效能優化之將Servlet容器變成Undertow

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程式碼,實際專案中應該會更明顯。