Как настроить размер кучи при запуске приложения Spring Boot со встроенным tomcat?

Я пытаюсь развернуть веб-приложение на основе Spring Boot в производство. Приложение построено с использованием Spring Boot 1.0.1 и имеет встроенный Tomcat 7 в качестве сервера приложений. Я хочу выделить больше памяти приложению при запуске приложения с java -jar myapp.jar командной строки java -jar myapp.jar.
Должен ли я использовать параметр JVM, такой как -Xms -Xmx или использовать переменную среды, такую как JAVA_OPTS? Я попытался найти ответ в документации или Google, но не получил ответ. Кто-нибудь может дать несколько советов?

Ответ 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>