SpringBootアプリケーションを起動するときにヒープサイズを構成する
1. 序章
このチュートリアルでは、Spring Bootアプリケーションを起動するときにヒープサイズを構成する方法を学習します。 開始ヒープサイズと最大ヒープサイズに対応する-Xmsおよび-Xmx設定を構成します。
次に、コマンドラインで mvn を使用してアプリケーションを起動するときに、最初にMavenを使用してヒープサイズを構成します。 また、Mavenプラグインを使用してこれらの値を設定する方法についても説明します。 次に、アプリケーションを jar ファイルにパッケージ化し、 java-jarコマンドに提供されたJVMパラメーターを使用して実行します。
最後に、.confファイルを作成します。このファイルはJAVA_OPTSを設定し、Linux SystemVIinit手法を使用してアプリケーションをサービスとして実行します。
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}
プラグインで構成するJVM引数は、-Dspring-boot.run.jvmArgumentsを使用してMavenから実行するときに提供される引数よりも優先されます。
3. java-jarで実行
アプリケーションをajar ファイルから実行している場合は、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 。
今のところ、これをresourcesの下のフォルダーに配置し、ヒープ構成をJAVA_OPTSに追加できます。
JAVA_OPTS="-Xms512m -Xmx1024m"
次に、Mavenビルドを変更して、 spring-boot-runtime-2.confファイルを
<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>
また、アプリケーションをサービスとして実行するには、実行可能ファイルを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. 結論
この短いチュートリアルでは、SpringBootアプリケーションを実行する3つの一般的な方法でJavaヒープ設定をオーバーライドする方法を検討しました。 コマンドラインで値を変更することと、Spring Boot Mavenプラグインで値を設定することの両方で、Mavenから始めました。
次に、 java -jarを使用してアプリケーションjar ファイルを実行し、JVM引数を渡しました。
最後に、ファットjarと一緒に。confファイルを設定し、アプリケーションを実行するためのSystem V initサービスを作成することにより、1つの可能な本番レベルのソリューションを検討しました。
Spring Boot fat jar、からサービスとデーモンを作成するための他のソリューションがあり、多くはJVM引数をオーバーライドする特定の方法を提供します。
いつものように、サンプルコードはGitHubでから入手できます。