web-dev-qa-db-fra.com

Comment configurer la taille du segment de mémoire lors du démarrage d'une application Spring Boot avec Tomcat intégré?

J'essaie de déployer une application Web propulsée par Spring Boot en production. L'application est conçue avec Spring Boot 1.0.1 et le Tomcat 7 par défaut est intégré en tant que serveur d'applications. Je souhaite allouer une plus grande mémoire à l'application lorsque je démarre l'application avec Java -jar myapp.jar ligne de commande.
Dois-je utiliser le paramètre JVM tel que -Xms -Xmx ou utilisez une variable d'environnement telle que Java_OPTS? J'ai essayé de chercher la réponse dans la documentation ou sur google, mais je n'ai pas obtenu de réponse. Quelqu'un peut-il donner des indices?

29
user2912360

Utilisez simplement le mécanisme normal que vous utiliseriez pour configurer la JVM. Les documents sont disponibles sur la ligne de commande:

$ Java -X
...
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
...
21
Dave Syer

Si vous démarrez l'application avec spring-boot plugin :

mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev

Sinon si exécutant Java -jar :

Java -Xmx512m -Dspring.profiles.active=dev -jar app.jar
52
Nicomak

Comme il s'agit spécifiquement d'une question Spring Boot, je dirais qu'une réponse plus utile que @ DaveSyer est la suivante:

Vous pouvez déposer un .conf fichier dans le même répertoire que votre WAR qui est en fait un script Shell.

par exemple.

$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export Java_OPTS="-Xmx1024m -Xms256m"

Toute configuration que vous y exécuterez sera exécutée avant le démarrage de Tomcat intégré à Spring Boot. Personnellement, je contrôle la version d'un .conf.example fichier dans mon application elle-même, puis déposez-en une copie sur chaque serveur sur lequel je déploie.

Bien sûr, tout ce que vous définissez dans ce .conf le fichier est remplaçable par les opérations en ligne de commande.

36
inanutshellus

Pour Spring Boot 2, vous devez spécifier la taille du tas dans pom.xml comme ci-dessous:

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>-Xmx64m</jvmArguments>
            </configuration>
        </plugin>
9
Zhang Buzz

Pour Spring Boot 1, l'argument Maven à spécifier dans la configuration du plug-in est jvmArguments et la propriété utilisateur est run.jvmArguments :

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

Pour Spring Boot 2, l'argument Maven à spécifier dans la configuration du plugin est également jvmArguments mais la propriété utilisateur est désormais spring-boot.run.jvmArguments :

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

Donc, si vous utilisez la méthode de configuration du plugin, pour Spring Boot 1 et 2, vous pouvez le faire:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>              
            -Xms4048m
            -Xmx8096m
        </jvmArguments>
    </configuration>
</plugin>
1
davidxxx