170322、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代碼,實際項目中應該會更明顯。

具體可以參考國外的一篇文章進行學習研究:

https://alexecollins.com/spring-boot-performance/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM