在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用Spring Cloud Alibaba做了一個微服務(wù)架構(gòu)的項(xiàng)目

jf_ro2CN3Fa ? 來源:CSDN ? 作者:pcdd ? 2022-10-12 10:44 ? 次閱讀

前言

最近自己用Spring Cloud Alibaba做了一個微服務(wù)架構(gòu)的項(xiàng)目,部署的時候遇到了難題:內(nèi)存不夠。目前該項(xiàng)目有7個微服務(wù),因?yàn)槲抑挥幸慌_阿里云的服務(wù)器(2C 4G),所以我只能把所有的微服務(wù)部署在一臺服務(wù)器上,部署方式是使用docker制作springboot的fat jar鏡像,每個微服務(wù)在不加任何JVM調(diào)優(yōu)參數(shù)的情況下所占內(nèi)存約500M。

由于是微服務(wù)所以肯定還要部署:nacos,除此之外還用到了redis、sentinel、rocketmq、elk等(mysql買的阿里云的),光是運(yùn)行這些應(yīng)用就占用內(nèi)存2個多G,剩下的1個多G內(nèi)存在部署4個微服務(wù)后就滿了,于是開始對springboot應(yīng)用的內(nèi)存進(jìn)行初步優(yōu)化:

添加JVM參數(shù)優(yōu)化內(nèi)存大小

>基于SpringBoot+MyBatisPlus+Vue&Element實(shí)現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項(xiàng)目地址:
>*視頻教程

#JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64
-Xms128m

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實(shí)現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項(xiàng)目地址:
>*視頻教程

#JVM最大分配的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4
-Xmx128m
#規(guī)定了每個線程虛擬機(jī)棧及堆棧的大小,一般情況下,256k是足夠的,此配置將會影響此進(jìn)程中并發(fā)線程數(shù)的大小。
-Xss256k
#指定并行GC線程的數(shù)量,一般最好和CPU核心數(shù)量相當(dāng)
-XX:ParallelGCThreads=2

默認(rèn)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時,JVM會減少堆直到 -Xms的最小限制。

因此服務(wù)器一般設(shè)置-Xms、-Xmx相等以避免在每次GC 后調(diào)整堆的大小。對象的堆內(nèi)存由稱為垃圾回收器的自動內(nèi)存管理系統(tǒng)回收。

默認(rèn)情況下,當(dāng) CPU 數(shù)量小于8, ParallelGCThreads 的值等于 CPU 數(shù)量,我的服務(wù)器是2C的所以這個參數(shù)可省略。配置完成后,啟動服務(wù)發(fā)現(xiàn)內(nèi)存確實(shí)變小了,由原來的500M降至100~200M,但不是我想要的效果,我期望的效果是達(dá)到幾十M的級別。

經(jīng)網(wǎng)上查閱大量資料得知可以使用Spring Native這門新技術(shù)來實(shí)現(xiàn)我的需求。(該技術(shù)正處于快速迭代階段,變動較大,建議用于個人學(xué)習(xí),不要用于生產(chǎn))

SpringBoot項(xiàng)目使用Spring Native后:

應(yīng)用啟動速度特別快,毫秒級別

運(yùn)行時更低的內(nèi)存消耗,官方展示的含有Spring Boot, Spring MVC, Jackson, Tomcat的鏡像大小是50M

為了達(dá)到前面的效果,代價是構(gòu)建時間更長(即使是一個Hello Word構(gòu)建也需要2分鐘,不過主要取決于電腦配置,我的是2min左右)

Spring Native是什么

簡而言之就是為了提高Java在云原生的競爭力(個人理解)。

以下內(nèi)容摘抄自GitHub上Spring Native的自述文件:

Spring Native 為使用GraalVM 原生映像編譯器將 Spring 應(yīng)用程序編譯為原生可執(zhí)行文件提供 beta 支持,以提供通常設(shè)計為打包在輕量級容器中的原生部署選項(xiàng)。實(shí)際上,目標(biāo)是在這個新平臺上支持幾乎未修改的 Spring Boot 應(yīng)用程序。

以下內(nèi)容摘抄自其他博客:

近幾年“原生”一詞一直泛濫在云計算、邊緣計算等領(lǐng)域中,而原生寵幸的語言也一直都是Golang,Rust等脫離Sandbox運(yùn)行的開發(fā)語言。Java得益于上世紀(jì)流行的一次編譯,到處執(zhí)行的理念,流行至今,但也因?yàn)檫@個原因,導(dǎo)致Java程序脫離不了JVM運(yùn)行環(huán)境,使得不那么受原生程序的青睞。在云原生泛濫的今天,臃腫的JVM使Java應(yīng)用程序?qū)Ρ绕渌Z言顯得無比的龐大,各路大神也想了很多方式讓Java變的更“原生”。

實(shí)戰(zhàn)

本次實(shí)戰(zhàn)相關(guān)的環(huán)境信息如下:

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

8d32cb1e-49d2-11ed-a3b6-dac502259ad0.png

從官方文檔得知(上圖)

使用 Spring Native 的應(yīng)用程序應(yīng)該使用 Java 11 或 Java 17 編譯。

構(gòu)建 Spring Boot 原生應(yīng)用程序有兩種主要方法:

使用Spring Boot Buildpacks 支持生成包含本機(jī)可執(zhí)行文件的輕量級容器。

使用GraalVM 原生鏡像 Maven 插件支持生成原生可執(zhí)行文件。

經(jīng)過各種踩坑后在本機(jī)上成功的使用了方法1和方法2。簡單來說:

方法1就是在SpringBoot2.3后,可以使用spring-boot-maven-plugin插件來構(gòu)建docker鏡像,使用mvn spring-boot:build-image命令結(jié)合Docker的API來實(shí)現(xiàn)Spring Boot 原生應(yīng)用程序的構(gòu)建,成功執(zhí)行后會直接生成一個docker鏡像,然后run這個鏡像就可以了,不用我們再寫Dockerfile了,相關(guān)的參數(shù)配置都在pom.xml中配置(該插件的configuration標(biāo)簽下,和fabric8或spotify的docker-maven-plugin很相似)。

方法2不需要安裝docker,但要安裝Visual Studio,然后執(zhí)行mvn -Pnative package命令后會生成一個可執(zhí)行文件(.exe),運(yùn)行即可。

主要區(qū)別如下

1 環(huán)境依賴不同

方法1需要安裝Docker

方法2需要安裝Visual Studio(需要用到部分單個組件:2個MSVC,1個Windows 10 SDK)

2 執(zhí)行的maven命令不同

方法1是mvn spring-boot:build-image

方法2是mvn -Pnative package

因?yàn)槊總€微服務(wù)使用Docker部署而不是exe文件,所以方法1正好符合我的需求,所以后文使用Spring Boot Buildpacks的方式構(gòu)建Spring Boot原生應(yīng)用程序。

1 安裝Graal VM(graalvm-ce-java11-windows-amd64)

8d65d798-49d2-11ed-a3b6-dac502259ad0.png8da0a8aa-49d2-11ed-a3b6-dac502259ad0.png

2 配置環(huán)境變量

8da97a48-49d2-11ed-a3b6-dac502259ad0.png8db62b94-49d2-11ed-a3b6-dac502259ad0.png8df55350-49d2-11ed-a3b6-dac502259ad0.png

針對方法1的話,上面三張圖好像只用配置JAVA_HOME就行,想一次成功的話建議3個都配,后續(xù)可以自行測試。

檢驗(yàn)是否安裝成功

8e255a6e-49d2-11ed-a3b6-dac502259ad0.png

3 安裝native-image

打開新的cmd,輸入以下命令,等待安裝

guinstallnative-image

這一步我執(zhí)行失敗了,解決方法就是從github上手動下載native-image,然后解壓、安裝

jar用WinRAR也是可以解壓的,解壓后如下

8e3112dc-49d2-11ed-a3b6-dac502259ad0.png

在bin目錄下打開cmd,輸入以下命令,等待安裝

$guinstall-Lnative-image*

4 安裝 Desktop for Windows

具體步驟略,按照官方文檔操作即可

5 配置pom.xml

前面都是準(zhǔn)備工作,這一步開始才是重點(diǎn)

首先快速創(chuàng)建一個Spring Boot項(xiàng)目,我命名為spring-native

完整的pom如下



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
Springrelease
https://repo.spring.io/release





spring-release
Springrelease
https://repo.spring.io/release




本文介紹的是Spring Native0.11.1版本,其對應(yīng)的Spring Boot版本必須是2.6.2,以上只是一個最基本的配置案例,實(shí)際開發(fā)中還需要在spring-boot-maven-plugin插件的configuration標(biāo)簽下配置其他許許多多的參數(shù)。

例如docker遠(yuǎn)程的地址和證書的路徑、jvm調(diào)優(yōu)參數(shù)、配置文件指定、docker鏡像名端口倉庫地址等等,最好的方法就是看spring-boot-maven-plugin的官方文檔,這里以配置jvm參數(shù)為例

8e40a99a-49d2-11ed-a3b6-dac502259ad0.png

通過官方文檔得知只需要在configuration標(biāo)簽下配置即可,例如


paketobuildpacks/builder:tiny

true

-Xms128m
-Xmx128m
-Xss256k
-XX:ParallelGCThreads=2
-XX:+PrintGCDetails


其他的配置參數(shù)還有很多。

6 執(zhí)行maven命令

mvnclean
mvn'-Dmaven.test.skip=true'spring-boot:build-image

下載完相關(guān)依賴后,電腦風(fēng)扇就開始呼呼的轉(zhuǎn),查看任務(wù)管理器發(fā)現(xiàn)CPU利用率100%,內(nèi)存使用量飆升,最后穩(wěn)定在90%+。

構(gòu)建成功

8e94ce6c-49d2-11ed-a3b6-dac502259ad0.png

7 創(chuàng)建并運(yùn)行容器

查看所有鏡像

8eb19c86-49d2-11ed-a3b6-dac502259ad0.png

spring-native就是構(gòu)建的鏡像

創(chuàng)建并運(yùn)行容器

8ebe08d6-49d2-11ed-a3b6-dac502259ad0.png

在Docker Desktop查看日志,發(fā)現(xiàn)應(yīng)用成功啟動,啟動僅耗時。,也就是59ms,果然印證了Spring Native啟動是毫秒級別這句話。

8ece54ca-49d2-11ed-a3b6-dac502259ad0.png

成功調(diào)用接口

8f0f7b8a-49d2-11ed-a3b6-dac502259ad0.png

在Docker Desktop查看占用內(nèi)存,僅28M左右。

8f25f43c-49d2-11ed-a3b6-dac502259ad0.png

不使用Spring Native啟動應(yīng)用

8f41ff1a-49d2-11ed-a3b6-dac502259ad0.png8f4bd38c-49d2-11ed-a3b6-dac502259ad0.png

啟動耗時3s,占用內(nèi)存高達(dá)511M,高下立判。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    13

    文章

    9693

    瀏覽量

    87292
  • JVM
    JVM
    +關(guān)注

    關(guān)注

    0

    文章

    160

    瀏覽量

    12519

原文標(biāo)題:這樣做優(yōu)化,實(shí)現(xiàn) 0.059s 啟動一個SpringBoot項(xiàng)目!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何用ACM簡化你的Spring Cloud微服務(wù)環(huán)境配置管理

    的差別,而這往往是bug和重大故障隱藏之所。總結(jié) 在本文中,我們以測試和生產(chǎn)連接不同的數(shù)據(jù)庫,配置不同的數(shù)據(jù)源(包括連接池)參數(shù)為例,介紹了如何將阿里云配置中心ACM與Spring Clo
    發(fā)表于 02-02 14:18

    EDAS再升級!全面支持Spring Cloud應(yīng)用

    服務(wù)器的不斷增加對于運(yùn)維人員也是極大的挑戰(zhàn)。開發(fā)、測試、線上環(huán)境差異性,交付流程越來越復(fù)雜,新應(yīng)用上線不僅效率低,而且風(fēng)險高。為了優(yōu)化Spring
    發(fā)表于 02-02 15:20

    使用阿里云ACM簡化你的Spring Cloud微服務(wù)環(huán)境配置管理

    和重大故障隱藏之所。總結(jié)在本文中,我們以測試和生產(chǎn)連接不同的數(shù)據(jù)庫,配置不同的數(shù)據(jù)源(包括連接池)參數(shù)為例,介紹了如何將阿里云配置中心ACM與Spring Cloud
    發(fā)表于 07-04 17:16

    Dubbo Cloud Native 之路的實(shí)踐與思考

    架構(gòu)師翟永超(《Spring Cloud 微服務(wù)實(shí)戰(zhàn)》的作者)。他告知 Consul 表現(xiàn)不錯,并在跨 DC(數(shù)據(jù)中心)方面也比較穩(wěn)定:他的答復(fù)讓我增強(qiáng)了 Consul 的信心,稍顯
    發(fā)表于 07-05 16:05

    使用Spring Cloud與Docker實(shí)戰(zhàn)微服務(wù)

    使用Spring Cloud與Docker實(shí)戰(zhàn)微服務(wù)
    發(fā)表于 09-09 08:31 ?7次下載
    使用<b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b>與Docker實(shí)戰(zhàn)<b class='flag-5'>微服務(wù)</b>

    簡單分析Java高可用集群和微服務(wù)架構(gòu)

    可能大部分讀者都在想,為什么在這以 dubbo、spring cloud 為代表的微服務(wù)時代,我要還要整理這種已經(jīng)“過時”高可用集群架構(gòu)
    的頭像 發(fā)表于 05-03 18:17 ?2260次閱讀
    簡單分析Java高可用集群和<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>

    RabbitRpc基于spring cloud微服務(wù)rpc調(diào)用

    ./oschina_soft/gitee-spring-cloud-rabbitrpc.zip
    發(fā)表于 06-14 09:51 ?1次下載
    RabbitRpc基于<b class='flag-5'>spring</b> <b class='flag-5'>cloud</b>的<b class='flag-5'>微服務(wù)</b>rpc調(diào)用

    微服務(wù)架構(gòu)技術(shù)棧選型解讀

    微服務(wù)治理中心框架 Apache Dubbo分布式RPC框架 Spring Cloud Alibaba分布式應(yīng)用
    的頭像 發(fā)表于 12-29 14:35 ?1908次閱讀

    Spring Cloud 】基于微服務(wù)架構(gòu)的智慧工地監(jiān)管平臺源碼帶APP

    技術(shù)架構(gòu)微服務(wù) 開發(fā)語言:Java 開發(fā)工具:Idea 前端框架:Vue 后端框架:Spring Cloud 數(shù) 據(jù) 庫:My
    的頭像 發(fā)表于 08-28 11:10 ?835次閱讀
    【<b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> 】基于<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的智慧工地監(jiān)管平臺源碼帶APP

    SpringCloud微服務(wù)架構(gòu):實(shí)現(xiàn)分布式系統(tǒng)的無縫協(xié)作

    在深入Spring Cloud之前,讓我們首先了解下什么是微服務(wù)架構(gòu)微服務(wù)
    的頭像 發(fā)表于 10-12 16:21 ?1193次閱讀
    SpringCloud<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>:實(shí)現(xiàn)分布式系統(tǒng)的無縫協(xié)作

    Spring Cloud :打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的
    的頭像 發(fā)表于 10-22 10:03 ?681次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> :打造可擴(kuò)展的<b class='flag-5'>微服務(wù)</b>網(wǎng)關(guān)

    springcloud微服務(wù)架構(gòu)

    Spring Cloud開源的微服務(wù)架構(gòu)框架,它提供了
    的頭像 發(fā)表于 11-23 09:24 ?1917次閱讀

    dubbo和spring cloud區(qū)別

    Dubbo和Spring Cloud是兩非常流行的微服務(wù)框架,各有自己的特點(diǎn)和優(yōu)勢。在本文中,我們將詳細(xì)介紹Dubbo和Spring
    的頭像 發(fā)表于 12-04 14:47 ?1952次閱讀

    Spring Cloud Gateway網(wǎng)關(guān)框架

    Spring Cloud Gateway網(wǎng)關(guān)框架 本軟件微服務(wù)架構(gòu)中采用Spring Cloud
    的頭像 發(fā)表于 08-22 09:58 ?681次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> Gateway網(wǎng)關(guān)框架

    寶藏級微服務(wù)架構(gòu)工具合集

    寶藏級熱門微服務(wù)架構(gòu)工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boo
    的頭像 發(fā)表于 12-21 16:33 ?556次閱讀
    主站蜘蛛池模板: 在线国产你懂的 | 免费一级特黄欧美大片勹久久网 | 手机亚洲第1页 | 国产一卡二卡3卡4卡四卡在线视频 | 国产成人精品怡红院 | 欧美色国| 久久久国产乱子伦精品 | 国产高清免费视频 | haodiaose在线精品免费观看 | 日本人爽p大片免费看 | 午夜视频网站 | 爱爱免费网址 | 欧美成人影院 | 婷婷久久综合网 | 日韩成人午夜 | 美国三级网 | 四虎4444hu4影视最新地址 | 天天干天操 | 国产2021成人精品 | 日韩欧美一区二区三区视频 | 色多多www视频在线观看免费 | 日韩毛片网 | 2021国产成人精品国产 | 男人女人真曰批视频播放 | 中文字幕一区二区三区精品 | 色综合久久久高清综合久久久 | 三级视频国产 | 天天躁夜夜躁狠狠躁躁 | 久久国产免费福利永久 | 免费香蕉视频国产在线看 | 日本理论午夜中文字幕第一页 | 欧美一区二区三区黄色 | 国产精品欧美精品国产主播 | 国产欧美精品一区二区色综合 | 我色综合 | 国产做a爰片久久毛片a | 全黄h全肉边做边吃奶在线观看 | 国产情侣真实露脸在线最新 | 亚洲综合色婷婷中文字幕 | 欧美爽爽爽爽爽爽视频 | 天天天操天天天干 |