问题
I am trying to deploy a Spring Boot powered web app to production. The app is built with Spring Boot 1.0.1 and has the default Tomcat 7 embedded as application server. I want to allocate larger memory to the app when start the app with java -jar myapp.jar
command line.
Should I use JVM parameter such as -Xms -Xmx
or use environment variable such as JAVA_OPTS
? I have tried to look for the answer in documentation or google it, but did not get answer. Can anyone give some hints?
回答1:
Just use whatever normal mechanism you would to set up the JVM. Docs are available on the command line:
$ java -X
...
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
...
回答2:
If starting the app with the spring-boot plugin:
mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev
Otherwise if running java -jar:
java -Xmx512m -Dspring.profiles.active=dev -jar app.jar
回答3:
Since this is specifically a Spring Boot question, I'd argue that a more useful answer than @DaveSyer's is this:
You can drop a .conf
file in the same directory as your WAR that is effectively a shell script.
e.g.
$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export JAVA_OPTS="-Xmx1024m -Xms256m"
Any configuration you do there will be run before the Spring Boot embedded Tomcat starts up. Personally, I version-control a .conf.example
file in my app itself, then drop a copy of it on each server I deploy to.
Of course anything you set in that .conf
file is overrideable with command line operations.
回答4:
For Spring Boot 2
, you have to specify heap size in pom.xml
as below:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Xmx64m</jvmArguments>
</configuration>
</plugin>
回答5:
For Spring Boot 1, the Maven argument to specify in the plugin configuration is jvmArguments
and the user property is run.jvmArguments :
mvn spring-boot:run -Drun.jvmArguments="-Xms2048m -Xmx4096m"
For Spring Boot 2, the Maven argument to specify in the plugin configuration is also jvmArguments
but the user property is now spring-boot.run.jvmArguments :
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms2048m -Xmx4096m"
So if you use the plugin configuration way, both for Spring Boot 1 and 2 you can do that :
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Xms4048m
-Xmx8096m
</jvmArguments>
</configuration>
</plugin>
来源:https://stackoverflow.com/questions/23072187/how-to-configure-heap-size-when-starting-a-spring-boot-application-with-embedded