Я пытаюсь развернуть веб-приложение на основе Spring Boot в производство. Приложение построено с использованием Spring Boot 1.0.1 и имеет встроенный Tomcat 7 в качестве сервера приложений. Я хочу выделить больше памяти приложению при запуске приложения с java -jar myapp.jar
командной строки java -jar myapp.jar
.
Должен ли я использовать параметр JVM, такой как -Xms -Xmx
или использовать переменную среды, такую как JAVA_OPTS
? Я попытался найти ответ в документации или Google, но не получил ответ. Кто-нибудь может дать несколько советов?
Как настроить размер кучи при запуске приложения Spring Boot со встроенным tomcat?
Ответ 1
Просто используйте любой обычный механизм, который вы хотели бы настроить JVM. Документы доступны в командной строке:
$ java -X
...
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
...
Ответ 2
Если запускать приложение с помощью плагина spring-boot
:
mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev
В противном случае, если работает java -jar
:
java -Xmx512m -Dspring.profiles.active=dev -jar app.jar
Ответ 3
Так как это специально вопрос Spring Boot, я бы сказал, что более полезным ответом, чем @DaveSyer, является следующее:
Вы можете удалить файл .conf
в том же каталоге, что и WAR, который фактически является оболочкой script.
например.
$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export JAVA_OPTS="-Xmx1024m -Xms256m"
Любая конфигурация, которую вы там делаете, будет запущена до запуска Spring загрузочного Tomcat. Лично я контролирую версию файла .conf.example
в самом приложении, а затем отбрасываю его на каждом сервере, на котором я развертываю.
Конечно, все, что вы установили в этом файле .conf
, переопределяется с помощью операций с командной строкой.
Ответ 4
Для Spring Boot 2
вы должны указать размер кучи в pom.xml
как pom.xml
ниже:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Xmx64m</jvmArguments>
</configuration>
</plugin>
Ответ 5
Для Spring Boot 1 аргумент Maven, который нужно указать в конфигурации плагина, - это jvmArguments
а пользовательское свойство - run.jvmArguments
:
mvn spring-boot:run -Drun.jvmArguments="-Xms2048m -Xmx4096m"
Для Spring Boot 2 аргумент Maven, который нужно указать в конфигурации плагина, также является jvmArguments
но свойство пользователя теперь имеет значение spring-boot.run.jvmArguments
:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms2048m -Xmx4096m"
Так что если вы используете способ настройки плагина, то для Spring Boot 1 и 2 вы можете сделать это:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Xms4048m
-Xmx8096m
</jvmArguments>
</configuration>
</plugin>