游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

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

  前言
  最近自己用SpringCloudAlibaba做了一个微服务架构的项目,部署的时候遇到了难题:内存不够。目前该项目有7个微服务,因为我只有一台阿里云的服务器(2C4G),所以我只能把所有的微服务部署在一台服务器上,部署方式是使用docker制作springboot的fatjar镜像,每个微服务在不加任何JVM调优参数的情况下所占内存约500M。
  由于是微服务所以肯定还要部署:nacos,除此之外还用到了redis、sentinel、rocketmq、elk等(mysql买的阿里云的),光是运行这些应用就占用内存2个多G,剩下的1个多G内存在部署4个微服务后就满了,于是开始对springboot应用的内存进行初步优化:
  添加JVM参数优化内存大小JVM初始分配的内存由Xms指定,默认是物理内存的164Xms128mJVM最大分配的内存由Xmx指定,默认是物理内存的14Xmx128m规定了每个线程虚拟机栈及堆栈的大小,一般情况下,256k是足够的,此配置将会影响此进程中并发线程数的大小。Xss256k指定并行GC线程的数量,一般最好和CPU核心数量相当XX:ParallelGCThreads2
  默认空余堆内存小于40时,JVM就会增大堆直到Xmx的最大限制;空余堆内存大于70时,JVM会减少堆直到Xms的最小限制。
  因此服务器一般设置Xms、Xmx相等以避免在每次GC后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。
  默认情况下,当CPU数量小于8,ParallelGCThreads的值等于CPU数量,我的服务器是2C的所以这个参数可省略。配置完成后,启动服务发现内存确实变小了,由原来的500M降至100200M,但不是我想要的效果,我期望的效果是达到几十M的级别。
  经网上查阅大量资料得知可以使用SpringNative这门新技术来实现我的需求。(该技术正处于快速迭代阶段,变动较大,建议用于个人学习,不要用于生产)
  SpringBoot项目使用SpringNative后:应用启动速度特别快,毫秒级别运行时更低的内存消耗,官方展示的含有SpringBoot,SpringMVC,Jackson,Tomcat的镜像大小是50M为了达到前面的效果,代价是构建时间更长(即使是一个HelloWord构建也需要2分钟,不过主要取决于电脑配置,我的是2min左右)SpringNative是什么
  简而言之就是为了提高Java在云原生的竞争力(个人理解)。
  以下内容摘抄自GitHub上SpringNative的自述文件:
  SpringNative为使用GraalVM原生映像编译器将Spring应用程序编译为原生可执行文件提供beta支持,以提供通常设计为打包在轻量级容器中的原生部署选项。实际上,目标是在这个新平台上支持几乎未修改的SpringBoot应用程序。
  以下内容摘抄自其他博客:
  近几年原生一词一直泛滥在云计算、边缘计算等领域中,而原生宠幸的语言也一直都是Golang,Rust等脱离Sandbox运行的开发语言。Java得益于上世纪流行的一次编译,到处执行的理念,流行至今,但也因为这个原因,导致Java程序脱离不了JVM运行环境,使得不那么受原生程序的青睐。在云原生泛滥的今天,臃肿的JVM使Java应用程序对比其他语言显得无比的庞大,各路大神也想了很多方式让Java变的更原生。
  实战
  本次实战相关的环境信息如下:OS:Windows1021H1IDE:IntelliJIDEA2021。2。3JDK:graalvmcejava1121。3。0Maven:3。6。3DockerDesktopforWindows:20。10。12SpringBoot:2。6。2SpringNative:0。11。1
  从官方文档得知(上图)
  使用SpringNative的应用程序应该使用Java11或Java17编译。
  构建SpringBoot原生应用程序有两种主要方法:使用SpringBootBuildpacks支持生成包含本机可执行文件的轻量级容器。使用GraalVM原生镜像Maven插件支持生成原生可执行文件。
  经过各种踩坑后在本机上成功的使用了方法1和方法2。简单来说:
  方法1就是在SpringBoot2。3后,可以使用springbootmavenplugin插件来构建docker镜像,使用mvnspringboot:buildimage命令结合Docker的API来实现SpringBoot原生应用程序的构建,成功执行后会直接生成一个docker镜像,然后run这个镜像就可以了,不用我们再写Dockerfile了,相关的参数配置都在pom。xml中配置(该插件的configuration标签下,和fabric8或spotify的dockermavenplugin很相似)。
  方法2不需要安装docker,但要安装VisualStudio,然后执行mvnPnativepackage命令后会生成一个可执行文件(。exe),运行即可。
  主要区别如下1环境依赖不同方法1需要安装Docker方法2需要安装VisualStudio(需要用到部分单个组件:2个MSVC,1个Windows10SDK)2执行的maven命令不同方法1是mvnspringboot:buildimage方法2是mvnPnativepackage
  因为每个微服务使用Docker部署而不是exe文件,所以方法1正好符合我的需求,所以后文使用SpringBootBuildpacks的方式构建SpringBoot原生应用程序。1安装GraalVM(graalvmcejava11windowsamd64)
  官方下载地址:
  https:www。graalvm。orgdownloads
  2配置环境变量
  针对方法1的话,上面三张图好像只用配置JAVAHOME就行,想一次成功的话建议3个都配,后续可以自行测试。扩展:最全的java面试题库
  检验是否安装成功
  3安装nativeimage
  打开新的cmd,输入以下命令,等待安装guinstallnativeimage
  这一步我执行失败了,解决方法就是从github上手动下载nativeimage,然后解压、安装
  https:github。comgraalvmgraalvmcebuildsreleasesdownloadvm21。3。0nativeimageinstallablesvmjava11windowsamd6421。3。0。jar
  jar用WinRAR也是可以解压的,解压后如下
  在bin目录下打开cmd,输入以下命令,等待安装guinstallLnativeimage4安装DesktopforWindows
  具体步骤略,按照官方文档操作即可:
  https:docs。docker。comdesktopwindowsinstall5配置pom。xml
  前面都是准备工作,这一步开始才是重点
  首先快速创建一个SpringBoot项目,我命名为springnative
  完整的pom如下lt;?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0https:maven。apache。orgxsdmaven4。0。0。xsdmodelVersion4。0。0modelVersionparentgroupIdorg。springframework。bootgroupIdspringbootstarterparentartifactIdversion2。6。2versionrelativePath!lookupparentfromrepositoryparentgroupIdltd。pcddgroupIdspringnativeartifactIdversion0。0。1SNAPSHOTversionnamespringnativenamedescriptionspringnativedescriptionpropertiesjava。version11java。versionrepackage。classifierspringnative。version0。11。1springnative。versionpropertiesdependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencygroupIdorg。springframework。experimentalgroupIdspringnativeartifactIdversion{springnative。version}versiondependencydependenciesbuildpluginsplugingroupIdorg。springframework。experimentalgroupIdspringaotmavenpluginartifactIdversion0。11。1versionexecutionsexecutionidgenerateidgoalsgoalgenerategoalgoalsexecutionexecutionsplugin!SpringBoot2。3发布后带来了新特性之一就是对构建镜像的便捷支持plugingroupIdorg。springframework。bootgroupIdspringbootmavenpluginartifactIdconfigurationimagebuilderpaketobuildpacksbuilder:tinybuilderenvBPNATIVEIMAGEtrueBPNATIVEIMAGEenvimageconfigurationpluginpluginsbuildrepositoriesrepositoryidspringreleaseidnameSpringreleasenameurlhttps:repo。spring。ioreleaseurlrepositoryrepositoriespluginRepositoriespluginRepositoryidspringreleaseidnameSpringreleasenameurlhttps:repo。spring。ioreleaseurlpluginRepositorypluginRepositoriesproject
  本文介绍的是SpringNative0。11。1版本,其对应的SpringBoot版本必须是2。6。2,以上只是一个最基本的配置案例,实际开发中还需要在springbootmavenplugin插件的configuration标签下配置其他许许多多的参数。
  例如docker远程的地址和证书的路径、jvm调优参数、配置文件指定、docker镜像名端口仓库地址等等,最好的方法就是看springbootmavenplugin的官方文档,这里以配置jvm参数为例
  通过官方文档得知只需要在configuration标签下配置即可,例如imagebuilderpaketobuildpacksbuilder:tinybuilderenvBPNATIVEIMAGEtrueBPNATIVEIMAGEBPEDELIMJAVATOOLOPTIONSxml:spacepreserveBPEDELIMJAVATOOLOPTIONSBPEAPPENDJAVATOOLOPTIONSXms128mBPEAPPENDJAVATOOLOPTIONSBPEAPPENDJAVATOOLOPTIONSXmx128mBPEAPPENDJAVATOOLOPTIONSBPEAPPENDJAVATOOLOPTIONSXss256kBPEAPPENDJAVATOOLOPTIONSBPEAPPENDJAVATOOLOPTIONSXX:ParallelGCThreads2BPEAPPENDJAVATOOLOPTIONSBPEAPPENDJAVATOOLOPTIONSXX:PrintGCDetailsBPEAPPENDJAVATOOLOPTIONSenvimage
  其他的配置参数还有很多。扩展:最全的java面试题库
  官方文档:
  https:docs。spring。iospringbootdocs2。6。2mavenpluginreferencehtmlsinglebuildimage6执行maven命令mvncleanmvnDmaven。test。skiptruespringboot:buildimage
  下载完相关依赖后,电脑风扇就开始呼呼的转,查看任务管理器发现CPU利用率100,内存使用量飙升,最后稳定在90。
  构建成功
  7创建并运行容器
  查看所有镜像
  springnative就是构建的镜像
  创建并运行容器
  在DockerDesktop查看日志,发现应用成功启动,启动仅耗时。,也就是59ms,果然印证了SpringNative启动是毫秒级别这句话。
  成功调用接口
  在DockerDesktop查看占用内存,仅28M左右。
  不使用SpringNative启动应用
  启动耗时3s,占用内存高达511M,高下立判。
  来源:blog。csdn。netweixin43553153articledetails122486769

冬季,有条件可多吃这4种高蛋白质食物,营养全面,身体舒坦冬季是一年四季中最冷的季节,在我国民间有着冬季进补的习惯,冬季天气严寒,在饮食上我们也要适量吃一点营养含量高的食物,帮我们的身体补充更加丰富的营养,营养全面了,身体也更舒坦了。……西安电子科技大学教授团队在信息融合领域顶级期刊发表综述文章据了解,近日,应《InformationFusion》主编SalvadorGarcia教授邀请,西安电子科技大学机电工程学院张强教授团队和英国AberystwythUniver……男人的越野梦来了!大家注意到了2019款的它了吗?男人的越野梦来了!大家注意到了2019款的它了吗?不知道在看这篇文章的那些男性朋友们有没有越野车的梦,当然看到汽车贴吧里面,大家对于越野车比较看好的无疑也就是丰田普拉多,……王文涛总裁江铃汽车迎来重要转折点为动员广大职工在当前产量大、提速快、要求高的挑战下,打一个漂亮的高产战,展现小蓝工厂全体员工在公司经营发展中的责任与担当。3月28日,江铃汽车股份有限公司小蓝工厂召开‘领’跑市……普拉多日本版只卖人民币约21。6万元起?国产版却要价44万起日本版的丰田普拉多居然基础整备质量达到了2。35吨,但是国产版的丰田普拉多,排量更大居然也只有2。28吨,相对比来说,日本原版的丰田普拉多更加显得笨重。为什么如此笨重,那……90后的装逼款!10多万就能拿下的轿跑SUV,包你心满意足!伴随着越来越多的年轻人成为购车主力,很多车企也推出了能够满足年轻人口味的轿跑SUV,时尚的溜背设计、优雅的尾部造型以及SUV的高底盘是吸引年轻消费者的致命点。或许提到轿跑SUV……中保研第二批碰撞成绩今日公布比亚迪宋MAX最差今天,期待中的第二批中国保险汽车安全指数车型测评结果公布。中国保险汽车安全指数由中国保险行业协会牵头发起,八家财产保险公司出资建立的中保研是国际机构RCAR组织在中国唯一……牡丹传情菏泽有请丨单县打造大善之地康养之城文旅品牌强化文旅组中国山东网感知山东3月25日讯(记者王丹玉)作为第32届菏泽国际牡丹文化旅游节期间的重要活动之一,3月25日,菏泽市政府新闻办举办牡丹传情菏泽有请主题系列新闻发布会第三场单县专……神州租车叹息神州租车可叹,四句话说清楚:1。神州租车APP、杭州取车门店、苏州维修中心、总部客服环节的每个人割裂开可能都没问题,但平台对顾客的交付和品质服务、解决问题能力出问题……奥迪又一款王牌SUV!秒杀宝马X6,动力才是亮点,网友必须爆豪华SUV领域当中还是其实还是以BBA为例,今天要讲的这一个主角就是奥迪最新推出的轿跑SUV奥迪Q8,来巩固奥迪高端SUV的市场。奥迪又一款王牌SUV!秒杀宝马X6,动力才是亮……全球公认最豪气的10大车标,国产车入围我们都知道,决定一家汽车品牌在市场上能否获得消费者的认可,除了要有强大的影响力之外,它的车标设计也起着至关重要的作用。而车标作为车企的形象代言人,如果在造型上没有特色的话,那它……为什么红旗L5比劳斯莱斯还少见?看这买车流程你就懂了!身为我国的国车,红旗是基本就相当于国内版本的劳斯莱斯。虽然现在适应市场化的需求,推出了H5和H7这类比较大众化的车子,但它的高端车型,比如L5,在购买的时候,过程还是非常复杂的……
从无人问津到人气爆棚,信阳花镜园惊艳变身话说这个十一,信阳市最热门的网红打卡地,非花镜园莫属。2015年9月9日拍摄七年前,这里曾是一片无人问津的荒芜之地,围挡围起,挡住了浉……LOLUzi官宣复出问答采访相信会尽快赶上自己的第一场比赛北京时间12月15日下午2点,BLG战队在哔哩哔哩6号直播间官宣了2022新赛季的阵容,最大的惊喜当属去年退役的前RNG战队明星ADC选手Uzi正式复出加盟!未能出席直播现场的……搭载索尼全新传感器?iPhone15曝光升级点太多文名动科技对于今年的iPhone14系列,大家满意吗?就我个人来说,我是不太满意的,iPhone1414Plus没诚意,除了6GB内存,其他配置几乎没有升级。iPhone……谷歌地图开放俄军事设施高分辨率卫星图当地时间18日谷歌地图开放俄战略要地高清卫星图像同一天美国防部官员透露美国对乌提供的新一轮价值8亿美元的军援正在密集运送中可以每……解禁复出就夺冠,梁靖崑拒绝爆冷没想到自己能够拿到冠军随着一记关键的回球过网,梁靖崑终于拿下了解禁复出后的首个赛事冠军。获胜后,兴奋不已的梁靖崑,举起双臂对着上空高呼庆祝。北京时间3月5日晚,WTT球星挑战赛果阿站男单决赛,在两位……宇宙存在多少个黑洞晴朗的夜晚,我们抬头仰望星空,无穷的宇宙让我们充满幻想,当宇宙被证实宇存在黑洞的时刻,我们大概已经找到了地球的未来,尽管那是在N亿年以后。我们是否在思考宙中究竟有多少个黑洞?这……四川小城内的石窟,少有游客却是国宝石窟,藏着中国罕见双头佛造我想在石窟旅行中,很少人会提到巴蜀石窟吧!毕竟在敦煌莫高窟、洛阳龙门石窟等大型皇家石窟之下,巴蜀地区的民间石窟的确不算太过于庞大。不过巴蜀地区的石窟凭借着独特性同样在中国……聚焦进博会可持续理念下,奢侈品企业寻新增长点今年的进博会上,各奢侈品集团在践行可持续理念上下足了功夫。11月6日,第一财经记者在进博会消费品场馆看见,开云集团旗下品牌巴黎世家展出的一件晚礼裙由一条条皮带经过错综复杂……游戏王青蛙卡组女神加护,金翅雀鲷,拟态革鲀,潜逅,女神镞罠卡女神的加护(陷阱卡)AegisofGaia。拥有伤害、回复的效果。卡图是逆转之女神的全貌。永续陷阱卡:自己回复3000基本分。自己场上表侧表示存在的这张卡从场上……C罗购入限量版手表,价值63万英镑,这款手表有多独特?C罗克里斯蒂亚诺罗纳尔多又奖励了自己一块价值630,000英镑的独特手表,以纪念他转会沙特阿拉伯球队AlNassr。这位葡萄牙足球前锋在1月份完成了一份每年1。75亿英镑……最新通知停售涨价!17日上午,上海迪士尼乐园年卡小程序发布通知:为了更好地管理客流和保障乐园内游客体验,自今年3月17日上午8时起,上海迪士尼度假区将在各销售渠道暂停发售上海迪士尼乐园年卡,包括……iPhone不支持地震预警?我们可能误会它了今天有条微博热搜不知道差友们看到没?欸,有一说一,如果不是看到这条热搜,我之前还真没注意原来iPhone没有地震预警,你在设置里搜索地震关键词,会发现啥结果都没:而……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网