拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 启动Spring Boot应用程序时配置堆大小

启动Spring Boot应用程序时配置堆大小

白鹭 - 2021-11-09 2197 0 2

1.简介

在本教程中,我们将学习启动Spring Boot应用程序时如何配置堆大小。我们将配置-Xms和-Xmx设置,它们对应于起始堆大小和最大堆大小。


然后,当在命令行上mvn启动应用程序时,我们将首先使用Maven来配置堆大小。我们还将研究如何使用Maven插件设置这些值。接下来,我们将应用程序打包到jar文件中,并使用提供给java -jar命令的JVM参数运行它。


最后,我们将创建一个.conf文件,该文件设置JAVA_OPTS并使用Linux System V Init技术将我们的应用程序作为服务运行。

2.从Maven运行

2.1。传递JVM参数

让我们从创建一个简单的REST控制器开始,该控制器返回一些基本的内存信息,我们可以使用这些信息来验证我们的设置:

@GetMapping("memory-status")

 public MemoryStats getMemoryStatistics() {

 MemoryStats stats = new MemoryStats();

 stats.setHeapSize(Runtime.getRuntime().totalMemory());

 stats.setHeapMaxSize(Runtime.getRuntime().maxMemory());

 stats.setHeapFreeSize(Runtime.getRuntime().freeMemory()); return stats;

 }

让我们使用mvn spring-boot:run原样运行它以获取基线。一旦我们的应用程序启动,我们就可以使用curl来调用我们的REST控制器:

curl http://localhost:8080/memory-status

我们的结果会因我们的机器而异,但看起来会像这样:

{"heapSize":333447168,"heapMaxSize":5316280320,"heapFreeSize":271148080}

对于Spring Boot 2.x,我们可以使用-Dspring-boot.run将参数传递给我们的应用程序。


-Dspring-boot.run.jvmArguments将起始堆和最大堆大小传递给我们的应用程序:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms2048m -Xmx4096m"

现在,当我们命中端点时,我们应该看到我们指定的堆设置:

{"heapSize":2147483648,"heapMaxSize":4294967296,"heapFreeSize":2042379008}

2.2。使用Maven插件

我们可以通过在pom.xml文件中spring-boot-maven-plugin来避免每次运行应用程序时都必须提供参数:


让我们配置插件以设置所需的堆大小:

<plugins>

 <plugin>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-maven-plugin</artifactId>

 <executions>

 <execution>

 <configuration>

 <mainClass>com.baeldung.heap.HeapSizeDemoApplication</mainClass>

 </configuration>

 </execution>

 </executions>

 <configuration>

 <executable>true</executable>

 <jvmArguments>

 -Xms256m

 -Xmx1g </jvmArguments>

 </configuration>

 </plugin>

 </plugins>

现在,我们可以仅使用mvn spring-boot:run运行我们的应用程序,并在ping端点时查看正在使用的指定JVM参数:

{"heapSize":259588096,"heapMaxSize":1037959168,"heapFreeSize":226205152}

-Dspring-boot.run.jvmArguments从Maven运行时,我们在插件中配置的所有JVM参数将优先于提供的所有JVM参数。

3.使用java -jar

如果从aj ar文件运行应用程序,则可以向java命令提供JVM参数。


首先,我们必须在我们的Maven文件jar


<packaging>jar</packaging>

然后,我们可以将应用程序打包到aj ar文件中:

mvn clean package

现在我们有了j ar文件,可以使用java -jar运行它并覆盖堆配置:

java -Xms512m -Xmx1024m -jar target/spring-boot-runtime-2.jar

让我们curl端点以检查内存值:

{"heapSize":536870912,"heapMaxSize":1073741824,"heapFreeSize":491597032}

4.使用.conf文件

最后,我们将学习如何使用.conf文件在作为Linux服务运行的应用程序上设置堆大小。


让我们开始创建一个与应用程序jar文件同名且扩展名为.conf spring-boot-runtime-2.conf 。


我们现在可以将其放置在资源下的文件夹中,并将堆配置添加到JAVA_OPTS :

JAVA_OPTS="-Xms512m -Xmx1024m"

接下来,我们将修改我们的Maven构建,以将spring-boot-runtime-2.conf文件jar文件target文件夹中:

<build>

 <finalName>${project.artifactId}</finalName>

 <resources>

 <resource>

 <directory>src/main/resources/heap</directory>

 <targetPath>${project.build.directory}</targetPath>

 <filtering>true</filtering>

 <includes>

 <include>${project.name}.conf</include>

 </includes>

 </resource>

 </resources>

 <plugins>

 <plugin>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-maven-plugin</artifactId>

 <executions>

 <execution>

 <configuration>

 <mainClass>com.baeldung.heap.HeapSizeDemoApplication</mainClass>

 </configuration>

 </execution>

 </executions>

 <configuration>

 <executable>true</executable>

 </configuration>

 </plugin>

 </plugins>

 </build>

我们还需要将executable设置为true才能将我们的应用程序作为服务运行。


我们可以打包jar文件并使用Maven .conf

mvn clean package spring-boot:repackage

让我们创建我们的init.d服务:

sudo ln -s /path/to/spring-boot-runtime-2.jar /etc/init.d/spring-boot-runtime-2

现在,让我们开始我们的应用程序:

sudo /etc/init.d/spring-boot-runtime-2 start

然后,当我们命中端点时,应该看到遵守了.conf文件中JAVA_OPT

{"heapSize":538968064,"heapMaxSize":1073741824,"heapFreeSize":445879544}

5.结论

在这个简短的教程中,我们研究了如何以三种常见的方式运行Spring Boot应用程序来覆盖Java堆设置。我们从Maven开始,既可以在命令行中修改值,也可以在Spring Boot Maven插件中进行设置。


接下来,我们使用java -jar jar文件并传入JVM参数。


最后,我们通过设置来研究一种可能的生产级别解决方案。 conf文件旁边的胖子jar并创建一个System V初始化服务来运行我们的应用程序。


还有其他解决方案可用于从Spring Boot胖子中创建服务和守护程序jar,其中许多解决方案提供了覆盖JVM参数的特定方法。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *