Рубрики
Без рубрики

Настройка размера Кучи При Запуске Приложения Spring Boot

Автор оригинала: Amy DeGregorio.

1. введение

В этом уроке мы узнаем, как настроить размер кучи при запуске приложения Spring Boot. Мы будем настраивать параметры -Xms и -Xmx , которые соответствуют стартовому и максимальному размеру кучи.

Затем мы сначала используем Maven для настройки размера кучи при запуске приложения с помощью mvn в командной строке. Мы также рассмотрим, как мы можем установить эти значения с помощью плагина Maven. Затем мы упакуем ваше приложение в файл jar и запустим его с параметрами JVM , предоставленными команде java-jar .

Наконец, мы создадим файл .conf , который устанавливает JAVA_OPTS и запускает наше приложение как службу , используя метод инициализации Linux System V.

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 для вызова нашего RestController:

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

Наши результаты будут варьироваться в зависимости от вашей машины, но будут выглядеть примерно так:

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

Для Spring Boot 2.x мы можем передавать аргументы в наше приложение с помощью -Spring-boot.run .

Давайте передадим начальный и максимальный размер кучи нашему приложению с аргументами -Spring-boot.run.jvm :

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

Теперь, когда мы достигнем нашей конечной точки, мы должны увидеть наши указанные настройки кучи:

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

2.2. Использование плагина Maven

Мы можем избежать необходимости указывать параметры при каждом запуске нашего приложения, настроив spring-boot-maven-plugin в нашем pom.xml файл:

Давайте настроим плагин для установки желаемых размеров кучи:


    
        org.springframework.boot
        spring-boot-maven-plugin
        
            
                            
                    com.baeldung.heap.HeapSizeDemoApplication
                
            
        
        
            true
            
                -Xms256m
                -Xmx1g
            
        
    

Теперь мы можем запустить наше приложение, используя только mvn spring-boot:run , и увидеть наши указанные аргументы JVM в использовании, когда мы пингуем нашу конечную точку:

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

Любые аргументы JVM, которые мы настраиваем в нашем плагине, будут иметь приоритет над любыми аргументами, предоставленными при запуске из Maven с использованием Любые аргументы JVM, которые мы настраиваем в нашем плагине, будут иметь приоритет над любыми аргументами, предоставленными при запуске из Maven с использованием .

3. Работа с java -jar

Если мы запускаем наше приложение из файла j ar , мы можем предоставить аргументы JVM команде java .

Во-первых, мы должны указать упаковку как jar в вашем файле Maven:

jar

Затем мы можем упаковать наше приложение в файл j ar :

mvn clean package

Теперь, когда у нас есть файл j ar , мы можем запустить его с помощью java-jar и переопределить конфигурацию кучи:

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

Давайте свернем нашу конечную точку, чтобы проверить значения памяти:

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

4. Использование файла .conf

Наконец, мы узнаем, как использовать файл .conf для установки размера кучи в приложении, запущенном как служба Linux.

Давайте начнем с создания файла с тем же именем, что и у нашего приложения jar file и расширением .conf : spring-boot-runtime-2.conf .

Мы можем поместить это в папку в разделе ресурсы на данный момент и добавить нашу конфигурацию кучи в JAVA_OPTS :

JAVA_OPTS="-Xms512m -Xmx1024m"

Затем мы изменим вашу сборку Maven, чтобы скопировать файл spring-boot-runtime-2.conf в папку target рядом с нашим файлом jar :


    ${project.artifactId}
    
        
            src/main/resources/heap
            ${project.build.directory}
            true
            
                ${project.name}.conf
            
        
    
    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                
                    
                        com.baeldung.heap.HeapSizeDemoApplication
                    
                
            
            
                true
            
        
    

Нам также необходимо установить выполнимый к истинный чтобы запустить наше приложение как службу.

Мы можем упаковать наш файл jar и скопировать ваш файл .conf с помощью Maven:

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

Затем, когда мы достигнем нашей конечной точки, мы должны увидеть, что наши значения JAVA_OPT , указанные в файле .conf , соблюдаются:

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

5. Заключение

В этом коротком руководстве мы рассмотрели, как переопределить параметры кучи Java для трех распространенных способов запуска приложений Spring Boot. Мы начали с Maven, изменив значения в командной строке, а также установив их в плагине Spring Boot Maven.

Затем мы запустили наше приложение jar файл, используя java-jar и передав аргументы JVM.

Наконец, мы рассмотрели одно возможное решение на уровне производства, установив a . conf файл рядом с нашим fat jar и создание службы инициализации System V для запуска нашего приложения.

Существуют и другие решения для создания служб и демонов из Spring Boot fat jar, и многие из них предоставляют конкретные способы переопределения аргументов JVM.

Как всегда, пример кода доступен на GitHub .