当前位置:首页 > 科技  > 软件

如何将开发环境的 Spring Boot 应用程序内存降低 40% 以上

来源: 责编: 时间:2024-01-15 09:19:49 321观看
导读本文翻译自:https://medium.com/@satanjim/how-we-reduced-the-memory-consumption-of-spring-boot-application-over-40-for-the-development-c8a5813fac23在开发基础的 Spring Boot 应用程序时,我们需要考虑可承受的

本文翻译自:https://medium.com/@satanjim/how-we-reduced-the-memory-consumption-of-spring-boot-application-over-40-for-the-development-c8a5813fac23LZp28资讯网——每日最新资讯28at.com

在开发基础的 Spring Boot 应用程序时,我们需要考虑可承受的内存消耗。随着添加更多依赖项,内存消耗也会增加。对于整体应用程序,通常仍然可以承受内存消耗,但当我们开发多个微服务并在本地计算机上运行时,这可能成为一场噩梦,影响开发效率。LZp28资讯网——每日最新资讯28at.com

Spring Boot 和 JVM 都带有一些默认配置,适用于大多数情况,甚至在某些生产环境中也能胜任。但是如果我们能调整一些配置来适应本地开发,就可以显著减少内存消耗。请注意,我不是 JVM 和 Spring Boot 方面的专家,只是想在这篇文章中分享一些我自己的经验。LZp28资讯网——每日最新资讯28at.com

谁消耗了内存

首先,让我们了解一下,到底是谁在消耗内存呢?没错,是 JVM。但是它是如何做到的呢?LZp28资讯网——每日最新资讯28at.com

要深入了解这个问题,我们需要了解 JVM 的内部结构,但这超出了本文的范围。简单来说,JVM 的内存消耗可以分成堆(Heap)、元空间(Metaspace)、每个线程的堆栈(Thread Stack)以及其他。LZp28资讯网——每日最新资讯28at.com

内存消耗内存消耗LZp28资讯网——每日最新资讯28at.com

LZp28资讯网——每日最新资讯28at.com

为了减少内存消耗,我们需要向 JVM 显式地传递一些参数。LZp28资讯网——每日最新资讯28at.com

首先,我们需要进行一些前置准备:LZp28资讯网——每日最新资讯28at.com

  • 安装 Docker 和 docker-compose
  • 使用 Java 17 版本(但是 8 到最新版本之间的任何版本应该都可以,除了 Java 8 中的一些旧补丁)
  • 使用 Spring Boot

接下来,我们可以配置一些参数。创建一个名为"dev.jvm.conf"的文件,并输入以下值(稍后我们会解释这些值的含义):LZp28资讯网——每日最新资讯28at.com

# dev.jvm.conf# 覆盖应用程序的属性SERVER_TOMCAT_ACCEPT_COUNT=3SERVER_TOMCAT_MAX_CONNECTIONS=3SERVER_TOMCAT_THREADS_MAX=3SERVER_TOMCAT_THREADS_MIN_SPARE=1SPRING_MAIN_LAZY_INITIALIZATION=true# 设置JVM参数JAVA_TOOL_OPTIONS=-XX:+UseSerialGC -Xss512k -XX:MaxRAM=200m

然后,我们使用 docker-compose 将这些环境变量传递到容器中:LZp28资讯网——每日最新资讯28at.com

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

现在运行docker-compose up命令,您应该能看到一些差异。LZp28资讯网——每日最新资讯28at.com

接下来,让我们详细讨论一下这些配置

在开始之前,请记住,降低某些值不会直接减少本地环境中的内存使用量,因为本地环境中通常不会有那么多请求。我们添加阈值的目的是,即使在本地环境中,如果我们开始收到更多请求,也要限制其数量。这最终将有助于限制内存使用。LZp28资讯网——每日最新资讯28at.com

  • SERVER_TOMCAT_ACCEPT_COUNT:该属性设置了当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。当服务器负载较重且所有工作线程都繁忙时,传入的请求将被放入队列中。如果队列已满,额外的连接请求将被拒绝。默认值为 100。
  • SERVER_TOMCAT_MAX_CONNECTIONS:该属性定义了 Tomcat 服务器同时能够处理的最大连接数。默认值为 8192。
  • SERVER_TOMCAT_THREADS_MAX:该属性控制 Tomcat 服务器将创建的请求处理线程的最大数量。默认值为 200。
  • SERVER_TOMCAT_THREADS_MIN_SPARE:该属性为嵌入式 Tomcat 服务器设置了最小备用线程数。默认值为 10。
  • SPRING_MAIN_LAZY_INITIALIZATION:将该属性值设置为 true 意味着应用程序中的所有 bean 都将延迟初始化。这将有助于缩短启动时间。
  • JAVA_TOOL_OPTIONS:使用该属性,我们可以向 JVM 传递一些额外的参数。让我们来谈谈其中的每个参数意义。
  • -XX:+UseSerialGC:这个参数会使 JVM 使用单线程进行内联垃圾收集,而不是使用专用的 GC 线程。
  • -Xss512k:这个参数将每个线程的堆栈大小限制为 512KB,而不是默认的 1MB。
  • -XX:MaxRAM=200m:这个参数设置 JVM 最大可使用的 RAM 内存为 200MB。

这是一些简单的调整,但它们可以在本地开发环境中显著减少内存消耗。当然,根据您的具体情况,您可能需要进一步进行调整。这只是一个起点,您可以根据实际需求进行优化。LZp28资讯网——每日最新资讯28at.com

总结

总而言之,通过适当配置 JVM 和 Spring Boot,并理解内存消耗的原理,我们可以降低本地开发环境的内存消耗,提高工作效率。希望这些提示能对您有所帮助!LZp28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-60921-0.html如何将开发环境的 Spring Boot 应用程序内存降低 40% 以上

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何使用FluentResults优雅地处理结果和错误

下一篇: 程序员进阶架构师必看的面试重灾区:JVM整体架构、内存模型与调优实战

标签:
  • 热门焦点
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein“利用市场支配力量强迫服装厂商与之签订独家
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
Top