需求缘起:在研究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/

170322、Spring Boot 性能优化之将Servlet容器变成Undertow的更多相关文章

  1. Spring Boot 性能优化

    spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...

  2. Spring Boot → 09:使用外置Servlet容器_tomcat9.0

    Spring Boot → 09:使用外置Servlet容器_tomcat9.0

  3. SpringBoot 源码解析 (六)----- Spring Boot的核心能力 - 内置Servlet容器源码分析(Tomcat)

    Spring Boot默认使用Tomcat作为嵌入式的Servlet容器,只要引入了spring-boot-start-web依赖,则默认是用Tomcat作为Servlet容器: <depend ...

  4. Spring boot 内存优化

    转自:https://dzone.com/articles/spring-boot-memory-performance It has sometimes been suggested that Sp ...

  5. Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext

    Spring boot ---- java.lang.NoClassDefFoundError: javax/servlet/ServletContext   场景描述 项目中用到spring boo ...

  6. Spring Boot 实战:如何自定义 Servlet Filter

    1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter来处理一些逻辑.比如简单的权限系统.请求头过滤.防止 XSS 攻击等. ...

  7. 使用Spring Boot DevTools优化你的开发体验

    场景再现 某日少年收到前端同学发来的消息说联调的接口响应异常

  8. Spring整合quartz关闭,关闭Tomcat Servlet容器时内存泄漏

    出错信息 22-Sep-2017 06:19:51.064 WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearR ...

  9. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

随机推荐

  1. 基于Redis构建10万+终端级的高性能部标JT808协议的Gps网关服务器(转)

    原文地址:http://www.jt808.com/?p=1282 在开发一个大规模的部标GPS监控平台的时候,就算我们花费再多的时间设计和规划,我们也并不能准确的预测出自己未来的车载终端接入量有多大 ...

  2. Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结

    Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...

  3. 亲热接触Redis-第一天

    引言 nosql,大规模分布式缓存遍天下.Internet的时代在中国由其走得前沿,这一切归功于我国特色的电商. 因此nosql.大数据技术在中国应用的比国外还要前沿. 从这一章開始我们将開始进入到真 ...

  4. Ubuntu14.04.3 64位环境下openjdk7编译

    系统环境:Ubuntu14.04.3 -amd64 in VMWare1.安装openjdk7依赖 sudo apt- sudo apt--jdk sudo apt-get install build ...

  5. Android Studio 更新gradle插件

    今天更新了CentOS, 更新了java版本. 然后gradle跪了..... 不吐槽java版本的兼容性问题了.... 反正有他自己的理由.... 那么就更新gradle咯.... 下面是方法... ...

  6. Centos7 安装Git-cola

    首先安装Git sudo yum -y install git* 找到 git-all.noarch , 安装这个. sudo yum install git-all.noarch ========= ...

  7. 419. Roman to Integer【medium】

    Given a roman numeral, convert it to an integer. The answer is guaranteed to be within the range fro ...

  8. 执行git命令出现 xcrun: error:

    xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does no ...

  9. vue2.0实现图片加载失败默认显示图片

    <div class="bg"> <img :src="goods.phoneFloorAd.resUrl" :onerror="e ...

  10. Android——Activity和Intent及Activity的生命周期

    实验Activity的生命周期 package com.example.chenshuai.test; import android.app.Activity; import android.os.B ...