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

这样做优化,实现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,高下立判。
  文章仅供参考,建议结合Spring Native官方最新文档学习。https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/index.html
  原文链接:https://mp.weixin.qq.com/s/y6wRXxMDvy8r-fqmWjvI3Q

暗黑2佣兵用背信和强制哪个好(搭配丧钟)?暗黑破坏神2不同种类的第二幕佣兵(米山)无论在输出抗怪和辅助方面都非常突出,再为其凑齐一套中等偏上的装备,有时能发挥的作用甚至会让主角黯然失色,因此很多玩家都戏称暗黑2为米山传,正英雄联盟视角怎么拉远?首先不用任何辅助工具进入界面(地图勿喷)。如图用惯无限视距的玩家是不是发现标记的地方是不是特别大,特别不习惯?接下来,点击右边小地图的设置(图中红色区域),或者按Esc键进入设置面不懂就问,维埃里没什么荣誉,为何大家都说他厉害?欧洲杯零进球的霸王中锋!据说他在国际米兰不输罗纳尔多?世界杯9场9球!西甲24场24球!意甲23场24球!曾经创造过足坛第一转会费纪录!在国际米兰的发挥比罗纳尔多还更好!就算身上挂平价保湿霜哪个牌子好?说到国货护肤品牌,我们都能想到百雀羚片仔癀春娟大宝上海女人雪花膏戴春林京卫本草安安友谊等,小时候看妈妈擦脸的,价格都不贵现在北京后海,南锣鼓巷那一带也有戴春林跟上海女人的店铺,感觉头条上有没有没用过眼霜的女人?四十岁之前从没用过,有天拿着镜子一照突然发现眼周有了细纹,吓得赶紧去买了瓶眼霜,到现在已经用了好几年了。本人一直以来比较爱美,但是从来不面膜也不化妆眼霜之类的就更没用过。主要本人皮你身边有抱养的孩子吗?他们的生活都过得如何?我女儿就是抱养的,来的时候刚出生三天,不管是婆家还是娘家,大家都非常疼她,老公说本来就是我们的女儿,只是我不愿再生借别人的肚子罢了。儿子常常私下打趣女儿是亲生的,他才是抱养的,他俩刚拿到房产证发现契税发票上的房屋价格和购房合同上的房屋总价不一样,这是怎么回事?不一致是正常的,一致反而不正常。我看不少回答都说错了,所以在此强调一下,契税发票上的房屋价格和购房合同上的房屋总价不一样是正常的,一样了反而不正常。1契税的计征依据为不含增值税金额油门是控制出油量的吗?油门控制的并不是出油量,而是控制节气门的开度。现如今的汽车,出油量全由行车电脑控制,而油门控制的是节气门,在节气门旁边有个传感器,通过感知节气门的开度多少把数据传回给行车电脑,行车你心中东北人最爱的下酒菜前五名是什么?现在有一些人不知出于什么目的,好按地域的不同说事,对河南,东北等持有莫名的偏见。其实东北人喝酒是非常讲究的,并非是大葱蘸大酱那么简单。各人认为排在前五名的下酒菜应该是这样的1杀猪菜假如没有酒,古代文人能留下那么多经典的书法给我们吗?经典的书法与无关吧!有很多人一辈子不喝酒照样写出的字来。酒和书法关系不大,没有酒,依然不会影响经典书法数量流传。在古代著名书法家中,的确有嗜酒如命的人物。其中最著名的当数有颠张狂素从衡水去山西自驾游,一是平遥,二是大槐树,应该如何走?跟着志玲姐姐走这得看看你是走高速还是走国道了,去年开车从枣强走国道到邢台云梦山去玩,高速两个小时多点,国道五个小时随走随玩,我是一天行程。我是纯粹玩,导航去的。从河北衡水到山西自驾
从13到63!丁俊晖上演大戏,吕昊天虽败犹荣,两名将爆冷出局开篇如题,英锦赛正赛迎来了一场荡气回肠的比赛,即本赛事3冠王中国名将丁俊晖王者归来,低开高走,逆势翻盘,手感如神,孤勇前行,以一场酣畅淋漓的胜利,总分63,强势淘汰球风颇硬且有着老无缘逆转!库里276,维金斯264,勇士悔不当初,大合同给错人了北京时间11月14日,NBA常规赛勇士客场挑战国王,赛前,勇士5胜7负排名西部第13,而国王5胜6负位居西部第11,此役的最大看点肯定是库里能否延续前几场火爆的表现,以及汤普森能否世界杯32强H组巡礼天蓝军团乌拉圭乌拉圭人有一句口头禅别的国家有历史,我们国家有足球。翻开乌拉圭的足球历史,我们会深刻理解这句话的含义。很多人不知道马拉多纳和齐达内的偶像是谁,他就是被誉为乌拉圭的足球王子弗朗西斯科李铁的商业版图曝光!涉及9家公司,每一桩生意都与足球有关11月14日,相信各位球迷也已经听说,前中国男足主帅李铁正在参加足协举办的职业级教练培训线下会议时,被相关部门的工作人员带走调查!李铁被带走调查的消息一出,成为国内媒体球迷关注的焦50大胜!中国女足联赛霸主又赢了,16场轰47球,提前问鼎三冠王正文12日进行的女超联赛第16轮一场较量中,国内霸主武汉车谷江大女足又赢了,50横扫广东梅州客家。女超16场角逐下来,卫冕冠军武汉女足合计狂轰47球,并于第14轮的赛后实现提前成功排球超级联赛综合福建上海男女排完胜对手新华社长春11月13日电(记者李典胡佳丽)20222023中国女子排球超级联赛13日继续在江苏省常州市展开争夺,上海福建广东获胜。男子排超方面,浙江男排大胜黄石男排。在女子排超第四卡塔尔世界杯32强巡礼丨昔日对手再相逢瑞士队期待突破与蜕变新华社西安11月14日电题昔日对手再相逢瑞士队期待突破与蜕变新华社记者姚友明一年前欧锦赛上索默扑出姆巴佩的点球,帮助瑞士队在点球大战中淘汰世界冠军法国队晋级八强的动图,如今被设置在44后,奥沙利文登场,中国德比上演,英锦赛又将诞生4位16强球员北京时间11月14日消息,2022年斯诺克英锦赛于昨夜今晨又结束了4场首轮比赛的争夺,直接入围正赛的TOP16种子球员遭遇滑铁卢,一夜连续吃到了3场败仗,尼尔罗伯逊希金斯巴里霍金斯宣布离队!C罗炮轰滕哈赫,曼联回应11月14日凌晨,C罗接受了英国知名主持人摩根的专访,目前摩根放出了预告内容,在预告内容中C罗有很多重磅言论。采访中,C罗语出惊人。此前,C罗在对阵热刺时提前离场,遭到主帅滕哈赫的曼联绝杀险胜维拉实现两连胜新华社伦敦11月13日电(记者张薇)英超联赛13日进行了世界杯前的最后两场比赛,曼联队依靠小将加纳乔的补时进球以21绝杀富勒姆队。阿斯顿维拉队以21击败布莱顿队,新帅埃梅里带队实现C罗吐槽曼联设施健身房游泳池都是我21岁时看到的样子直播吧11月14日讯C罗接受名记皮尔斯摩根专访,吐槽自2013年弗格森爵士退休后曼联的进步为零。我不知道发生了什么,自从弗格森爵士离开后,我看不到俱乐部的变化,进步为零。比如,一个