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?
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
...
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
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.
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>
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>