日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

如何將開發(fā)環(huán)境的 Spring Boot 應(yīng)用程序內(nèi)存降低 40% 以上

來源: 責(zé)編: 時間:2024-01-15 09:19:49 235觀看
導(dǎo)讀本文翻譯自:https://medium.com/@satanjim/how-we-reduced-the-memory-consumption-of-spring-boot-application-over-40-for-the-development-c8a5813fac23在開發(fā)基礎(chǔ)的 Spring Boot 應(yīng)用程序時,我們需要考慮可承受的

本文翻譯自:https://medium.com/@satanjim/how-we-reduced-the-memory-consumption-of-spring-boot-application-over-40-for-the-development-c8a5813fac23fQG28資訊網(wǎng)——每日最新資訊28at.com

在開發(fā)基礎(chǔ)的 Spring Boot 應(yīng)用程序時,我們需要考慮可承受的內(nèi)存消耗。隨著添加更多依賴項(xiàng),內(nèi)存消耗也會增加。對于整體應(yīng)用程序,通常仍然可以承受內(nèi)存消耗,但當(dāng)我們開發(fā)多個微服務(wù)并在本地計(jì)算機(jī)上運(yùn)行時,這可能成為一場噩夢,影響開發(fā)效率。fQG28資訊網(wǎng)——每日最新資訊28at.com

Spring Boot 和 JVM 都帶有一些默認(rèn)配置,適用于大多數(shù)情況,甚至在某些生產(chǎn)環(huán)境中也能勝任。但是如果我們能調(diào)整一些配置來適應(yīng)本地開發(fā),就可以顯著減少內(nèi)存消耗。請注意,我不是 JVM 和 Spring Boot 方面的專家,只是想在這篇文章中分享一些我自己的經(jīng)驗(yàn)。fQG28資訊網(wǎng)——每日最新資訊28at.com

誰消耗了內(nèi)存

首先,讓我們了解一下,到底是誰在消耗內(nèi)存呢?沒錯,是 JVM。但是它是如何做到的呢?fQG28資訊網(wǎng)——每日最新資訊28at.com

要深入了解這個問題,我們需要了解 JVM 的內(nèi)部結(jié)構(gòu),但這超出了本文的范圍。簡單來說,JVM 的內(nèi)存消耗可以分成堆(Heap)、元空間(Metaspace)、每個線程的堆棧(Thread Stack)以及其他。fQG28資訊網(wǎng)——每日最新資訊28at.com

內(nèi)存消耗內(nèi)存消耗fQG28資訊網(wǎng)——每日最新資訊28at.com

fQG28資訊網(wǎng)——每日最新資訊28at.com

為了減少內(nèi)存消耗,我們需要向 JVM 顯式地傳遞一些參數(shù)。fQG28資訊網(wǎng)——每日最新資訊28at.com

首先,我們需要進(jìn)行一些前置準(zhǔn)備:fQG28資訊網(wǎng)——每日最新資訊28at.com

  • 安裝 Docker 和 docker-compose
  • 使用 Java 17 版本(但是 8 到最新版本之間的任何版本應(yīng)該都可以,除了 Java 8 中的一些舊補(bǔ)?。?/li>
  • 使用 Spring Boot

接下來,我們可以配置一些參數(shù)。創(chuàng)建一個名為"dev.jvm.conf"的文件,并輸入以下值(稍后我們會解釋這些值的含義):fQG28資訊網(wǎng)——每日最新資訊28at.com

# dev.jvm.conf# 覆蓋應(yīng)用程序的屬性SERVER_TOMCAT_ACCEPT_COUNT=3SERVER_TOMCAT_MAX_CONNECTIONS=3SERVER_TOMCAT_THREADS_MAX=3SERVER_TOMCAT_THREADS_MIN_SPARE=1SPRING_MAIN_LAZY_INITIALIZATION=true# 設(shè)置JVM參數(shù)JAVA_TOOL_OPTIONS=-XX:+UseSerialGC -Xss512k -XX:MaxRAM=200m

然后,我們使用 docker-compose 將這些環(huán)境變量傳遞到容器中:fQG28資訊網(wǎng)——每日最新資訊28at.com

# docker-compose.ymlservices:  service1:    image: service1:dev    env_file:      - dev.jvm.conf  service2:    image: service2:dev    env_file:      - dev.jvm.conf

現(xiàn)在運(yùn)行docker-compose up命令,您應(yīng)該能看到一些差異。fQG28資訊網(wǎng)——每日最新資訊28at.com

接下來,讓我們詳細(xì)討論一下這些配置

在開始之前,請記住,降低某些值不會直接減少本地環(huán)境中的內(nèi)存使用量,因?yàn)楸镜丨h(huán)境中通常不會有那么多請求。我們添加閾值的目的是,即使在本地環(huán)境中,如果我們開始收到更多請求,也要限制其數(shù)量。這最終將有助于限制內(nèi)存使用。fQG28資訊網(wǎng)——每日最新資訊28at.com

  • SERVER_TOMCAT_ACCEPT_COUNT:該屬性設(shè)置了當(dāng)所有可能的請求處理線程都在使用時,傳入連接請求的最大隊(duì)列長度。當(dāng)服務(wù)器負(fù)載較重且所有工作線程都繁忙時,傳入的請求將被放入隊(duì)列中。如果隊(duì)列已滿,額外的連接請求將被拒絕。默認(rèn)值為 100。
  • SERVER_TOMCAT_MAX_CONNECTIONS:該屬性定義了 Tomcat 服務(wù)器同時能夠處理的最大連接數(shù)。默認(rèn)值為 8192。
  • SERVER_TOMCAT_THREADS_MAX:該屬性控制 Tomcat 服務(wù)器將創(chuàng)建的請求處理線程的最大數(shù)量。默認(rèn)值為 200。
  • SERVER_TOMCAT_THREADS_MIN_SPARE:該屬性為嵌入式 Tomcat 服務(wù)器設(shè)置了最小備用線程數(shù)。默認(rèn)值為 10。
  • SPRING_MAIN_LAZY_INITIALIZATION:將該屬性值設(shè)置為 true 意味著應(yīng)用程序中的所有 bean 都將延遲初始化。這將有助于縮短啟動時間。
  • JAVA_TOOL_OPTIONS:使用該屬性,我們可以向 JVM 傳遞一些額外的參數(shù)。讓我們來談?wù)勂渲械拿總€參數(shù)意義。
  • -XX:+UseSerialGC:這個參數(shù)會使 JVM 使用單線程進(jìn)行內(nèi)聯(lián)垃圾收集,而不是使用專用的 GC 線程。
  • -Xss512k:這個參數(shù)將每個線程的堆棧大小限制為 512KB,而不是默認(rèn)的 1MB。
  • -XX:MaxRAM=200m:這個參數(shù)設(shè)置 JVM 最大可使用的 RAM 內(nèi)存為 200MB。

這是一些簡單的調(diào)整,但它們可以在本地開發(fā)環(huán)境中顯著減少內(nèi)存消耗。當(dāng)然,根據(jù)您的具體情況,您可能需要進(jìn)一步進(jìn)行調(diào)整。這只是一個起點(diǎn),您可以根據(jù)實(shí)際需求進(jìn)行優(yōu)化。fQG28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

總而言之,通過適當(dāng)配置 JVM 和 Spring Boot,并理解內(nèi)存消耗的原理,我們可以降低本地開發(fā)環(huán)境的內(nèi)存消耗,提高工作效率。希望這些提示能對您有所幫助!fQG28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-60921-0.html如何將開發(fā)環(huán)境的 Spring Boot 應(yīng)用程序內(nèi)存降低 40% 以上

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何使用FluentResults優(yōu)雅地處理結(jié)果和錯誤

下一篇: 程序員進(jìn)階架構(gòu)師必看的面試重災(zāi)區(qū):JVM整體架構(gòu)、內(nèi)存模型與調(diào)優(yōu)實(shí)戰(zhàn)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 5月iOS設(shè)備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發(fā)布的iOS設(shè)備性能榜的上榜設(shè)備并沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動,剛剛開始的蘋果WWDC2023,推出的產(chǎn)品也依舊是新款Mac Pro、新款Mac Stu
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進(jìn)行反混淆,尤其是使用自定義混淆器對其進(jìn)行混淆時。什么是混
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個小小的重要功能可以大大改善您網(wǎng)站的用戶體驗(yàn)
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(消息堆積)、消費(fèi) 三大塊領(lǐng)域。那接下來,我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過程。注意,如果白話中不小心提到相關(guān)代
  • 攜眾多高端產(chǎn)品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數(shù)字娛樂領(lǐng)域最具知名度與影響力的年度盛會中國國際數(shù)碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領(lǐng)先的科
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強(qiáng)性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機(jī),該機(jī)搭載了聯(lián)發(fā)科天璣9000+,配備獨(dú)顯芯片Pro+,帶來了同價位段最佳的游戲體驗(yàn),一經(jīng)上市便受到了諸多用
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風(fēng)扇版本

    據(jù)10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實(shí)被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風(fēng)扇版本。另外,這款顯卡 PCB
  • 上海舉辦人工智能大會活動,建設(shè)人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發(fā)展盛典人工
Top 主站蜘蛛池模板: 突泉县| 呼伦贝尔市| 察哈| 和田市| 黔西| 阿鲁科尔沁旗| 招远市| 拜泉县| 朔州市| 合江县| 天津市| 西峡县| 泸西县| 额济纳旗| 中方县| 客服| 逊克县| 长乐市| 汝阳县| 牟定县| 泸水县| 攀枝花市| 义乌市| 靖安县| 清新县| 富源县| 江津市| 营山县| 定西市| 旬邑县| 贵港市| 新田县| 徐汇区| 随州市| 大安市| 青龙| 剑阁县| 江源县| 百色市| 柞水县| 宁城县|