范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

这样做优化,实现0。059s启动一个SpringBoot项目

  前言
  最近自己用Spring Cloud Alibaba做了一个微服务架构的项目,部署的时候遇到了难题:内存不够。目前该项目有7个微服务,因为我只有一台阿里云的服务器(2C 4G),所以我只能把所有的微服务部署在一台服务器上,部署方式是使用docker制作springboot的fat jar镜像,每个微服务在不加任何JVM调优参数的情况下所占内存约500M。
  由于是微服务所以肯定还要部署:nacos,除此之外还用到了redis、sentinel、rocketmq、elk等(mysql买的阿里云的),光是运行这些应用就占用内存2个多G,剩下的1个多G内存在部署4个微服务后就满了,于是开始对springboot应用的内存进行初步优化:
  添加JVM参数优化内存大小# JVM初始分配的内存由-Xms指定,默认是物理内存的1/64 -Xms128m # JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4 -Xmx128m # 规定了每个线程虚拟机栈及堆栈的大小,一般情况下,256k是足够的,此配置将会影响此进程中并发线程数的大小。 -Xss256k # 指定并行GC线程的数量,一般最好和CPU核心数量相当 -XX:ParallelGCThreads=2
  默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx  的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
  因此服务器一般设置-Xms  、-Xmx  相等以避免在每次GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
  默认情况下,当 CPU 数量小于8, ParallelGCThreads   的值等于 CPU 数量,我的服务器是2C的所以这个参数可省略。配置完成后,启动服务发现内存确实变小了,由原来的500M降至100~200M,但不是我想要的效果,我期望的效果是达到几十M的级别。
  经网上查阅大量资料得知可以使用Spring Native这门新技术来实现我的需求。(该技术正处于快速迭代阶段,变动较大,建议用于个人学习,不要用于生产)
  SpringBoot项目使用Spring Native后:应用启动速度特别快,毫秒级别 运行时更低的内存消耗,官方展示的含有Spring Boot, Spring MVC, Jackson, Tomcat的镜像大小是50M 为了达到前面的效果,代价是构建时间更长(即使是一个Hello Word构建也需要2分钟,不过主要取决于电脑配置,我的是2min左右) Spring Native是什么
  简而言之就是为了提高Java在云原生的竞争力(个人理解)。
  以下内容摘抄自GitHub上Spring Native的自述文件:
  Spring Native 为使用GraalVM 原生映像编译器将 Spring 应用程序编译为原生可执行文件提供 beta 支持,以提供通常设计为打包在轻量级容器中的原生部署选项。实际上,目标是在这个新平台上支持几乎未修改的 Spring Boot 应用程序。
  以下内容摘抄自其他博客:
  近几年"原生"一词一直泛滥在云计算、边缘计算等领域中,而原生宠幸的语言也一直都是Golang,Rust等脱离Sandbox运行的开发语言。Java得益于上世纪流行的一次编译,到处执行的理念,流行至今,但也因为这个原因,导致Java程序脱离不了JVM运行环境,使得不那么受原生程序的青睐。在云原生泛滥的今天,臃肿的JVM使Java应用程序对比其他语言显得无比的庞大,各路大神也想了很多方式让Java变的更"原生"。
  实战
  本次实战相关的环境信息如下:OS:Windows10 21H1 IDE:IntelliJ IDEA 2021.2.3 JDK:graalvm-ce-java11-21.3.0 Maven:3.6.3 Docker Desktop for Windows: 20.10.12 Spring Boot:2.6.2 Spring Native:0.11.1
  从官方文档得知(上图)
  使用 Spring Native 的应用程序应该使用 Java 11 或 Java 17 编译。
  构建 Spring Boot 原生应用程序有两种主要方法:使用Spring Boot Buildpacks 支持生成包含本机可执行文件的轻量级容器。 使用GraalVM 原生镜像 Maven 插件支持生成原生可执行文件。
  经过各种踩坑后在本机上成功的使用了方法1和方法2。简单来说:
  方法1就是在SpringBoot2.3后,可以使用spring-boot-maven-plugin  插件来构建docker镜像,使用mvn spring-boot:build-image  命令结合Docker的API来实现Spring Boot 原生应用程序的构建,成功执行后会直接生成一个docker镜像,然后run这个镜像就可以了,不用我们再写Dockerfile  了,相关的参数配置都在pom.xml  中配置(该插件的configuration  标签下,和fabric8  或spotify  的docker-maven-plugin  很相似)。
  方法2不需要安装docker,但要安装Visual Studio  ,然后执行mvn -Pnative package  命令后会生成一个可执行文件(.exe),运行即可。
  主要区别如下1 环境依赖不同方法1需要安装Docker 方法2需要安装Visual Studio(需要用到部分单个组件:2个MSVC,1个Windows 10 SDK) 2 执行的maven命令不同方法1是 mvn spring-boot:build-image 方法2是 mvn -Pnative package
  因为每个微服务使用Docker部署而不是exe文件,所以方法1正好符合我的需求,所以后文使用Spring Boot Buildpacks的方式构建Spring Boot原生应用程序。1 安装Graal VM(graalvm-ce-java11-windows-amd64)
  官方下载地址:
  https://www.graalvm.org/downloads/
  2 配置环境变量
  针对方法1的话,上面三张图好像只用配置JAVA_HOME就行,想一次成功的话建议3个都配,后续可以自行测试。扩展:  最全的java面试题库
  检验是否安装成功
  3 安装native-image
  打开新的cmd,输入以下命令,等待安装gu install native-image
  这一步我执行失败了,解决方法就是从github上手动下载native-image  ,然后解压、安装
  https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-21.3.0/native-image-installable-svm-java11-windows-amd64-21.3.0.jar
  jar用WinRAR也是可以解压的,解压后如下
  在bin目录下打开cmd,输入以下命令,等待安装$ gu install -L native-image* 4 安装 Desktop for Windows
  具体步骤略,按照官方文档操作即可:
  https://docs.docker.com/desktop/windows/install/ 5 配置pom.xml
  前面都是准备工作,这一步开始才是重点
  首先快速创建一个Spring Boot项目,我命名为spring-native
  完整的pom如下<?xml version="1.0" encoding="UTF-8"?>      4.0.0              org.springframework.boot         spring-boot-starter-parent         2.6.2                    ltd.pcdd     spring-native     0.0.1-SNAPSHOT     spring-native     spring-native              11                  0.11.1                                 org.springframework.boot             spring-boot-starter-web                                        org.springframework.experimental             spring-native             ${spring-native.version}                                                           org.springframework.experimental                 spring-aot-maven-plugin                 0.11.1                                                               generate                                                      generate                                                                                                                        org.springframework.boot                 spring-boot-maven-plugin                                                               paketobuildpacks/builder:tiny                                                      true                                                                                                                      spring-release             Spring release             https://repo.spring.io/release                                          spring-release             Spring release             https://repo.spring.io/release                
  本文介绍的是Spring Native0.11.1  版本,其对应的Spring Boot版本必须是2.6.2,以上只是一个最基本的配置案例,实际开发中还需要在spring-boot-maven-plugin  插件的configuration  标签下配置其他许许多多的参数。
  例如docker远程的地址和证书的路径、jvm调优参数、配置文件指定、docker镜像名端口仓库地址等等,最好的方法就是看spring-boot-maven-plugin  的官方文档,这里以配置jvm参数为例
  通过官方文档得知只需要在configuration  标签下配置即可,例如  paketobuildpacks/builder:tiny     true       -Xms128m   -Xmx128m   -Xss256k   -XX:ParallelGCThreads=2   -XX:+PrintGCDetails   
  其他的配置参数还有很多。扩展:  最全的java面试题库
  官方文档:
  https://docs.spring.io/spring-boot/docs/2.6.2/maven-plugin/reference/htmlsingle/#build-image 6 执行maven命令mvn clean mvn "-Dmaven.test.skip=true" spring-boot:build-image
  下载完相关依赖后,电脑风扇就开始呼呼的转,查看任务管理器发现CPU利用率100%,内存使用量飙升,最后稳定在90%+。
  构建成功
  7 创建并运行容器
  查看所有镜像
  spring-native  就是构建的镜像
  创建并运行容器
  在Docker Desktop  查看日志,发现应用成功启动,启动仅耗时。,也就是59ms,果然印证了Spring Native  启动是毫秒级别这句话。
  成功调用接口
  在Docker Desktop  查看占用内存,仅28M左右。
  不使用Spring Native  启动应用
  启动耗时3s,占用内存高达511M,高下立判。
  来源:blog.csdn.net/weixin_43553153/article/details/122486769

喜上梅梢!来长宁这些地方感受梅好时光吧春和日丽,梅花飘香。在长宁,不少公园里都种植有梅花,竞相开放的梅花为初春的公园增添了一抹色彩,不时有游人闻香而来,欣赏美景。清风园在种德桥路延安西路路口的清风园内,粉红宫梅开得正艳松江30余处历史建筑修起来了,用起来了,活起来了历史建筑延续着一座城市的文脉承载着城市记忆因漕运而兴的松江历史建筑林立无声地向往来游人诉说着这座历史人文名城的过往如何让历史建筑传承历史文化和艺术价值?如何在城市更新的大环境下保留张维迎市场错了,还是市场理论错了?科斯把企业理解为市场的替代物,认为市场交易成本太高,需要企业替代市场,这个观点可能有问题,企业不是市场的替代物,而是市场本身的运行方式。没有大企业,就不可能有大范围的市场。有些判断三八妇女节愿你无惧时光,优雅到老,深情地美下去!愿你无惧时光,永远快乐优雅!冰心曾说世界上若没有女人,这世界至少要失去十分之五的真,十分之六的善,十分之七的美。母亲妻子女儿同事爱人不论是何种身份,身居何处,女人都是这世界最美的色湾区翼龙海外练级7个月,5万人潮和日式礼貌都经历了从CBA到NBL再到东超,刘传兴(右)丰富了职业生涯履历。从菲律宾PBA委员杯到东亚篮球超级联赛(以下简称东超)冠军周,湾区翼龙队以一个亚军一个季军结束了7个月的海外征战。对刘传兴继莫雷拉之后,潘顿又要走?前几日,一马君报道了澳洲籍骑师潘顿即将离港返澳的消息后,引发马友关注和热议!今日又有消息称,在澳洲马友和练马师的鼎力支持下,潘顿或将于3月19日举行的2023年宝马香港打吡大赛之后只愿每一天,都有诗意的暖杨绛先生说当你看过世界,见过众生,才发现你要见的世面,是自己内心的勇敢和自信当你看过四季,见过风云,才发现你要见的美景,是自己内心的淡定与从容。人生须臾,不过尔尔,简单美好的日子最IDEA研究院3721设计风云际会,创意无限粤港澳大湾区数字经济研究院(InternationalDigitalEconomyAcademy,简称IDEA研究院)致力于人工智能和数字经济领域的前沿研究与产业落地,是一家国际化代跑卖二手拒绝退款,Keep靠奖牌灰产赚了5个亿虚拟货币,想必大家是不陌生的,毕竟比特币的火爆是有目共睹的,然而除了以比特币为代表的虚拟货币之外,其实还有很多具有交易价值的物品,也能称之为虚拟货币,比如说,在过去几年大放异彩的健甲流来了,你提防了吗?最近开学季到来,有没有为孩子的复课证明而烦恼,现在春季是甲流与诺如病毒的多发季,希望这篇文章能帮到你。甲型流感(InfluenzaA,简称甲流)是由A型流感病毒引起的一种急性呼吸道湖人双喜临门!老詹拉塞尔齐发声,施罗德功过相抵,浓眉该谢2人北京时间3月8日湖人主场对阵灰熊,全场比赛结束湖人以112103成功击败了灰熊。这场对于双方球队来说非常的关键,毕竟现在的灰熊和湖人都需要赢球,如果灰熊还继续输球那么将会被国王追赶
我的孩子我知道你现在看不懂这封信,你只要知道妈妈是爱你的莹妹妹,我的女儿!很抱歉,妈妈以这种古老的方式和你对话。我知道你现在也看不懂,但妈妈就是想告诉你一些事一你是妈妈的孩子,这一点毋庸置疑,不管何时何地妈妈想告诉你,你可以大声告诉别人宋丹丹生日齐聚大咖,厨娘干女儿成为焦点,曾被前任妈妈逼分手近日,演员姜妍晒出干妈宋丹丹62岁生日宴的现场合照,照片中众星云集,皆是大众熟知的艺人,足有38人场面十分壮观。网友纷纷猜测,当天的主厨很大可能又是姜妍,毕竟她曾因一手好厨艺出圈,孕妈妈打怪升级之可怕的孕吐孕期的你有过孕吐吗?怀孕是一件让人感觉幸福的事情,可是有些孕妈会出现孕吐的情况,大多数人会在孕三个多月的时候和孕吐说拜拜,但是也有一些孕妈会一直吐到宝宝出生。孕期前三个月的我几乎每香云纱衫八分裙,才是5060岁女人的最美打扮!显瘦又年轻对于女人而言,什么是最好的年龄?往事不可追,过去的日子不会重来。人生多坎坷,来日也不一定可期,活在当下,就是对人生最好的诠释。没有完美的人生,只有正当最好的年龄。今天,我们来一起聊微小说太湖边上和35岁女人的一段情缘我小的时候,在太湖渔船上生活过一段时间,那时候虽然贫穷,但是我最快乐的时光,白天下湖摸鱼,在水中自由游荡,晚上在船边招待客人,但随着时代的发展,船屋也被取代。搬到城里后,离得比较远13岁王诗龄在豪宅内跳舞!长发披肩极具女神范,辣妹穿搭引人注目王岳伦李湘和王诗龄一家三口出现在机场,这是离婚后的首次亮相,这也导致王岳伦和李湘复婚的传闻愈演愈烈。至于王岳伦和李湘是否复婚谁也不知道,不过王诗龄的富养却是众所周知。王诗龄目前在英量子精密磁场筛查冠心病,激光测空气污染服贸会上黑科技中国经济周刊记者孙庭阳服贸会现场报道中小企业快速发展壮大,成为我国经济社会发展的主力军,而专精特新企业是中小企业中的佼佼者。在2022年服贸会上,首次设立的北京专精特新企业展区科技国家稳态强磁场实验装置刷新世界纪录来源中国科普网稳态强磁场实验装置混合磁体(中科院合肥物质科学研究院供图)8月12日,中国科学院合肥物质科学研究院强磁场科学中心研制的国家稳态强磁场实验装置,再攀高峰混合磁体(磁体口男人过了65岁,如果对这两件事情感兴趣,生活会更美好前言65岁的男人生活会发生很大的变化,在现实生活当中有些事情可以感兴趣,但是还有一些事情根本是不感兴趣的,如果我们对最重要的事情不感兴趣的话,可能就会做事很多机会,所以生活当中的点98K郭聪明即将回归?复出目的引热议,一细节暴露事情真相98K郭聪明即将回归?复出目的引热议,一细节暴露事情真相一位3000万粉丝音乐作者在巅峰时期退圈令众多网友纷纷表示惋惜没错这位就是郭聪明相信大家都听过98K这首歌曾在某款游戏火爆时世界上比挤公交上班赚钱做饭做家务更累更麻烦的事情是什么?如果要问世界上比挤公交上班赚钱做饭做家务更累更麻烦的事情是什么?我会毫不犹豫地说是看娃,特别是照看一个精力充沛调皮捣蛋又善于撒泼打滚的熊娃。不信,我简单列举几个熊娃让人崩溃的瞬间场