springboot项目内存性能优化
springboot项目内存性能优化
文章导读:springboot项目内存性能优化的相关介绍,具体内容如下:
在开发基础的 Spring Boot 应用程序时,我们需要考虑可承受的内存消耗。
随着添加更多依赖项,内存消耗也会增加。
对于整体应用程序,通常仍然可以承受内存消耗,但当我们开发多个微服务并在本地计算机上运行时,这可能成为一场噩梦,影响开发效率。
Spring Boot 和 JVM 都带有一些默认配置,适用于大多数情况,甚至在某些生产环境中也能胜任。
但是如果我们能调整一些配置来适应本地开发,就可以显著减少内存消耗。
请注意,我不是 JVM 和 Spring Boot 方面的专家,只是想在这篇文章中分享一些我自己的经验。
谁消耗了内存
首先,让我们了解一下,到底是谁在消耗内存呢?没错,是 JVM。但是它是如何做到的呢?
要深入了解这个问题,我们需要了解 JVM 的内部结构,但这超出了本文的范围。简单来说,JVM 的内存消耗可以分成堆(Heap)、元空间(Metaspace)、每个线程的堆栈(Thread Stack)以及其他。

为了减少内存消耗,我们需要向 JVM 显式地传递一些参数。
首先,我们需要进行一些前置准备:
- 安装 Docker 和 docker-compose
- 使用 Java 17 版本(但是 8 到最新版本之间的任何版本应该都可以,除了 Java 8 中的一些旧补丁)
- 使用 Spring Boot
接下来,我们可以配置一些参数。创建一个名为”dev.jvm.conf”的文件,并输入以下值(稍后我们会解释这些值的含义):
# dev.jvm.conf
# 覆盖应用程序的属性
SERVER_TOMCAT_ACCEPT_COUNT=3
SERVER_TOMCAT_MAX_CONNECTIONS=3
SERVER_TOMCAT_THREADS_MAX=3
SERVER_TOMCAT_THREADS_MIN_SPARE=1
SPRING_MAIN_LAZY_INITIALIZATION=true
# 设置JVM参数
JAVA_TOOL_OPTIONS=-XX:+UseSerialGC -Xss512k -XX:MaxRAM=200m
然后,我们使用 docker-compose 将这些环境变量传递到容器中:
# docker-compose.yml
services:
service1:
image: service1:dev
env_file:
- dev.jvm.conf
service2:
image: service2:dev
env_file:
- dev.jvm.conf
现在运行docker-compose up命令,您应该能看到一些差异。
接下来,让我们详细讨论一下这些配置
在开始之前,请记住,降低某些值不会直接减少本地环境中的内存使用量,因为本地环境中通常不会有那么多请求。
我们添加阈值的目的是,即使在本地环境中,如果我们开始收到更多请求,也要限制其数量。
这最终将有助于限制内存使用。
- SERVER_TOMCAT_ACCEPT_COUNT:该属性设置了当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。当服务器负载较重且所有工作线程都繁忙时,传入的请求将被放入队列中。如果队列已满,额外的连接请求将被拒绝。默认值为 100。
相关阅读
-
路由器651错误代码什么意思 宽带错误651最简单解决方法
小编为网友们解答路由器651错误代码什么意思和宽带错误651最简单解决方法的相关知识,接下来就是全面介绍。 用户在连接宽带的时候总是会有各种各样的问题,那么遇到宽带连接错误651是怎
-
电脑虚拟内存设置多少合适运行 台式电脑cpu性能排行榜
今日IT小知识分享:电脑虚拟内存设置多少合适运行和台式电脑cpu性能排行榜的话题,具体内容如下: 电脑上面的内存包括物理内存和虚拟内存,电脑主机上面的内存条就是物理内存;虚拟内
-
网线插着却显示无法识别网络WIFI可以用怎么回事
今天分享:网线插着却显示无法识别网络WIFI可以用怎么回事的相关经验,一起来看看吧! 在我们使用电脑连接网络时,经常会遇到网线插着却显示无法识别网络WIFI的情况,这种情况在很多人
-
电脑显示器红灯亮黑屏 显示器黑屏黄灯解决教程
今天带来的IT技巧小经验显示器黑屏黄灯解决教程的相关话题,关于电脑显示器红灯亮黑屏 显示器黑屏黄灯解决教程,具体介绍如下: 不少的IT袋网友在电脑使用的生涯中肯定都会大大小小的


