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/

原文地址:https://www.cnblogs.com/zrbfree/p/6708940.html