没想到Spring Boot居然这么耗内存,有点惊讶
Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起。如今,很多刚诞生的JAVA微服务框架大多主打“轻量级”,主要还是因为Spring Boot太重。
JAVA系微服务框架
No1-Spring Cloud
介绍
有Spring大靠山在,更新、稳定性、成熟度的问题根本不需要考虑。在JAVA系混的技术人员大约都听说过Spring的大名吧,所以不缺程序员……,而且这入手的难度十分低,完全可以省去一个架构师。
但是,你必然在服务器上付出:
- 至少一台“服务发现 ”的服务器;
- 可能有一个统一的网关Gateway;
- 可能需要一个用于“分布式配置管理”的配置中心;
- 可能进行“服务追踪”,知道我的请求从哪里来,到哪里去;
- 可能需要“集群监控”;
- 项目上线后发现,我们需要好多服务器,每次在集群中增加服务器时,都感觉心疼;
压测30秒
压测前的内存占用
如图,内存占用304M。
压测时的内存占用
如图,内存占用1520M(1.5G),CPU上升到321%
概览
总结
一个Spring Boot的简单应用,最少1G内存,一个业务点比较少的微服务编译后的JAR会大约50M;而Spring Cloud引入的组件会相对多一些,消耗的资源也会相对更多一些。
启动时间大约10秒左右: Started Application in 10.153 seconds (JVM running for 10.915)
JAVA系响应式编程的工具包Vert.x
介绍
背靠Eclipse的Eclipse Vert.x是一个用于在JVM上构建响应式应用程序的工具包。定位上与Spring Boot不冲突,甚至可以将Vert.x结合Spring Boot使用。众多Vert.x模块提供了大量微服务的组件,在很多人眼里是一种微服务架构的选择。
华为微服务框架Apache ServiceComb就是以Vert.x为底层框架实现的,在"基准测试网站TechEmpower"中,Vert.x的表现也十分亮眼。
压测30秒
压测前的内存占用
如图,内存占用65M。
压测时的内存占用
如图,内存占139M,CPU占2.1%,给人的感觉似乎并没有进行压测。
概览
总结
Vert.x单个服务打包完成后大约7M左右的JAR,不依赖Tomcat、Jetty之类的容器,直接在JVM上跑。
Vert.x消耗的资源很低,感觉一个1核2G的服务器已经能够部署许多个Vert.x服务。除去编码方面的问题,真心符合小项目和小模块。git市场上已经出现了基于Vert.x实现的开源网关- VX-API-Gateway帮助文档
https://duhua.gitee.io/vx-api-gateway-doc/
对多语言支持,很适合小型项目快速上线。
启动时间不到1秒:Started Vert.x in 0.274 seconds (JVM running for 0.274)
JAVA系其他微服务框架
SparkJava
- jar比较小,大约10M
- 占内存小,大约30~60MB;
- 性能还可以,与Spring Boot相仿;
Micronaut
- Grails团队新宠;
- 可以用 Java、Groovy 和 Kotlin 编写的基于微服务的应用程序;
- 相比Spring Boot已经比较全面;
- 性能较优,编码方式与Spring Boot比较类似;
- 启动时间和内存消耗方面比其他框架更高效;
- 多语言;
- 依赖注入;
- 内置多种云本地功能;
- 很新,刚发布1.0.0
Javalin
- 上手极为容易;
- 灵活,可以兼容同步和异步两种编程思路;
- JAR小,4~5M;
- 多语言;
- 有KOA的影子;
- 只有大约2000行源代码,源代码足够简单,可以理解和修复;
- 符合当今趋势;
- 多语言;
- 嵌入式服务器Jetty;
Quarkus
- 启动快;
- JAR小,大约10M;
- 文档很少;
没想到Spring Boot居然这么耗内存,有点惊讶的更多相关文章
- 惊呆了,Spring Boot居然这么耗内存!
Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起.如 ...
- 万万没想到,Spring Boot 竟然这么耗内存!
Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务. 但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起. ...
- 没想到,Git居然有3种“后悔药”!
没想到,Git居然有后悔药! 你知道Git版本控制系统中都有哪些"后悔药"吗? 本文通过案例讲解git reset . git revert . git checkout在版本控制 ...
- 从使用传统Web框架到切换到Spring Boot后的总结
1.前言 其实我接触 Spring Boot 的时间并不长,所以还算一个初学者,这篇文章也算是我对 Spring Boot 学习以及使用过程中的复盘,如果文章出现描述错误或表达不清晰的地方,欢迎大家在 ...
- Spring Boot文档
本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...
- spring boot 整合 elasticsearch 5.x
spring boot与elasticsearch集成有两种方式.一种是直接使用elasticsearch.一种是使用data中间件. 本文只指针使用maven集成elasticsearch 5.x, ...
- 部署spring boot + Vue遇到的坑(权限、刷新404、跨域、内存)
部署spring boot + Vue遇到的坑(权限.刷新404.跨域.内存) 项目背景是采用前后端分离,前端使用vue,后端使用springboot. 工具 工欲善其事必先利其器,我们先找一个操作L ...
- spring boot + embed tomcat + standalone jar的内存泄露问题
前一阵遇到了一个很坑的内存泄露问题,记录于此: 有个项目采用spring cloud重构后,部署到线上(其中有一个接口,大概每天调用量在1千万次左右),发现zabbix监控里,linux的可用内存一直 ...
- 居然仅用浏览器,就完成了Spring Boot应用的开发与部署!
最近有幸试用了一下阿里云的一个新产品:云开发平台,体验一把全新的开发模式!虽然中间也碰到了一些问题,但整体的体验透露着未来感,因为整个过程都不需要使用我们最常用的IDEA,仅依靠浏览器就把一个Spri ...
随机推荐
- centos 7 MysSQL 5.7.23 二进制安装
MySQL 5.7.23 二进制安装 CentOS 7 将默认数据库MySQL替换成了Mariadb. 这里会从系统的环境准备开始一步一步安装. 环境准备 系统版本 内核版本 IP地址 Centos ...
- 第五章 Unity中的基础光照(3)
目录 1. 在Unity Shader中实现高光反射光照模型 1.1 实践:逐顶点光照 1.2 逐像素光照 1.3 Blinn-Phong光照模型 2. 召唤神龙:使用Unity内置的函数 @ 1. ...
- tomcat部署项目,详细!
一.导出war包 1.先导出项目的war包(idea为例) 点+号,选择 之后点ok,确定,关闭窗口,回到idea主页面 在弹出窗口中选择新建的war,选build 之后在war导出目录,找到这个wa ...
- spring-MVC_笔记
需求:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转. ①导入SpringMVC相关坐标②配置SpringMVC核心控制器DispathcerServlet ③创建Controller类和视 ...
- deepin系统安装pip
Deepin系统安装pip Deepin系统通常自带了两个版本的python,一个python2,一个python3.可以在命令行输入这两个命令测试下是不是有两个版本,都是有两个版本都存在的情况下,安 ...
- MySQL必知必会(Select, Order by子句)
SELECT prod_name FROM products ORDER BY prod_name; SELECT prod_id, prod_price, prod_name FROM produc ...
- python geohash算法逆地址编码原理初探
1.geohash有什么用途呢?这几天刚好有个测试任务是关于设备信息位置处理的,里面提及到geohash:抱着测试的警觉性,打算研读一下这个geohash到底是什么?Geohash 是一种地理编码系统 ...
- 强化学习三:Dynamic Programming
1,Introduction 1.1 What is Dynamic Programming? Dynamic:某个问题是由序列化状态组成,状态step-by-step的改变,从而可以step-by- ...
- 笔记||Python3之模块与包
模块的概念:一个.py文件就称之为一个模块. 包的概念:把许多个模块按照功能放到不同的目录中来组织模块,这些组织存放模块文件的目录,我们称之为包. 模块与包的优势:1- 方便别人调用 2 - 避免同名 ...
- 用FPGA设计LCD 转 VGA
这个东西其实是在上一个冬天就做完了,而且似乎已经产业化了,当时是为一位朋友做的,这个朋友再卖给产业化的人,就像流于俗套的故事一样,这个朋友拿到了钱,不过不像项目开始时说的那样与我有关.想想多年前一起吃 ...