我正在尝试部署一个由Spring Boot支持的Web应用程序到生产环境中。该应用程序使用Spring Boot 1.0.1构建,并将默认的Tomcat 7嵌入为应用程序服务器。当使用java -jar myapp.jar
命令行启动应用程序时,我希望为应用程序分配更大的内存。
我应该使用JVM参数,例如-Xms -Xmx
,还是使用环境变量,例如JAVA_OPTS
?我已经尝试在文档或Google中寻找答案,但没有得到答案。是否有人可以给一些提示?
我正在尝试部署一个由Spring Boot支持的Web应用程序到生产环境中。该应用程序使用Spring Boot 1.0.1构建,并将默认的Tomcat 7嵌入为应用程序服务器。当使用java -jar myapp.jar
命令行启动应用程序时,我希望为应用程序分配更大的内存。
我应该使用JVM参数,例如-Xms -Xmx
,还是使用环境变量,例如JAVA_OPTS
?我已经尝试在文档或Google中寻找答案,但没有得到答案。是否有人可以给一些提示?
spring-boot
插件启动应用程序:mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev
java -jar
:java -Xmx512m -Dspring.profiles.active=dev -jar app.jar
考虑到这是一个关于Spring Boot的问题,我认为比@DaveSyer的回答更有用的是:
你可以在与你的WAR文件相同的目录中放置一个名为.conf
的文件,该文件实际上是一个shell脚本。
例如,
$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export JAVA_OPTS="-Xmx1024m -Xms256m"
任何配置都将在Spring Boot嵌入式Tomcat启动之前运行。个人建议,在应用程序本身中版本控制一个.conf.example文件,然后将其副本放置在每个部署到的服务器上。当然,您可以使用命令行操作覆盖在.conf文件中设置的任何内容。只需使用您通常用于设置JVM的任何常规机制。 文档在命令行上可用:
$ java -X
...
-Xms<size> Set initial Java heap size
-Xmx<size> Set maximum Java heap size
...
在Spring Boot 2中,您需要在pom.xml
文件中指定堆大小,如下所示:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Xmx64m</jvmArguments>
</configuration>
</plugin>
对于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>