暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

将Docker部署的SpringBoot应用内存降低 40% 以上

程序员恰恰 2024-06-01
81


为了减少内存消耗,我们需要向 JVM 显式地传递一些参数。

在 Docker Compose 中,env_file
是用来指定环境变量文件的路径的。默认情况下,env_file
中指定的路径是相对于当前工作目录的。因此,如果你想在 docker-compose.yml
中使用 dev.jvm.conf
文件,你需要确保该文件与 docker-compose.yml
文件处于同一级别的目录中。
project/

├── docker-compose.yml
└── dev.jvm.conf

复制
如果 dev.jvm.conf
文件不在同一级别的目录中,你可以使用相对路径或者绝对路径来引用它。例如,如果 dev.jvm.conf
文件在 configs
子目录下,你可以这样引用:
services:
  service1:
    env_file:
      - ./configs/dev.jvm.conf

复制

或者
services:
  service1:
    env_file:
      - /path/to/dev.jvm.conf

复制

接下来,我们可以配置一些参数。创建一个名为"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:
    env_file:
      - dev.jvm.conf
  service2:
    env_file:
      - dev.jvm.conf

复制

现在运行docker-compose up
命令,您应该能看到一些差异

配置解释

降低某些值不会直接减少本地环境中的内存使用量,因为本地环境中通常不会有那么多请求。我们添加阈值的目的是,即使在本地环境中,如果我们开始收到更多请求,也要限制其数量。这最终将有助于限制内存使用。
  • SERVER_TOMCAT_ACCEPT_COUNT=3:指定 Tomcat 服务器中接受传入连接的最大数量。在高负载环境下,这可以帮助控制并发连接的数量,从而减轻服务器压力。
  • SERVER_TOMCAT_MAX_CONNECTIONS=3:指定 Tomcat 服务器允许的最大同时连接数。这个值可以控制 Tomcat 可以同时处理的最大请求数量。
  • SERVER_TOMCAT_THREADS_MAX=3:指定 Tomcat 服务器用于处理传入请求的最大线程数。通过限制线程数量,可以避免因过度并发而导致的资源耗尽或性能下降。
  • SERVER_TOMCAT_THREADS_MIN_SPARE=1:指定 Tomcat 服务器在空闲状态下保持的最小线程数。这有助于确保即使在低负载时也有足够的线程可用,以快速响应传入的请求。
  • SPRING_MAIN_LAZY_INITIALIZATION=true:启用 Spring Boot 主应用程序的懒加载初始化。懒加载初始化意味着 Spring Boot 将推迟加载应用程序的组件,直到它们被请求时才加载。这有助于减少应用程序启动时的内存消耗和启动时间。
  • JAVA_TOOL_OPTIONS:使用该属性,我们可以向 JVM 传递一些额外的参数。让我们来谈谈其中的每个参数意义。

    • -XX:+UseSerialGC:这个参数会使 JVM 使用单线程进行内联垃圾收集,而不是使用专用的 GC 线程。
    • -Xss512k:这个参数将每个线程的堆栈大小限制为 512KB,而不是默认的 1MB。
    • -XX:MaxRAM=200m:这个参数设置 JVM 最大可使用的 RAM 内存为 200MB。

这是一些简单的调整,但它们可以在本地开发环境中显著减少内存消耗.

---THE END---



文章转载自程序员恰恰,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论