使用嵌入式Tomcat启动Spring Boot应用程序时如何配置堆大小?

问题描述 投票:32回答:5

我正在尝试将支持Spring Boot的Web应用程序部署到生产中。该应用程序使用Spring Boot 1.0.1构建,并嵌入了默认的Tomcat 7作为应用程序服务器。使用java -jar myapp.jar命令行启动应用程序时,我想为应用程序分配更大的内存。

[我应该使用JVM-Xms -Xmx参数还是使用JAVA_OPTS等环境变量?我试图在文档或Google中寻找答案,但没有得到答案。任何人都可以给些提示吗?

spring-boot heap-memory
5个回答
22
投票

只需使用设置JVM的任何常规机制即可。可在命令行上找到文档:

$ java -X
...
-Xms<size>        Set initial Java heap size
-Xmx<size>        Set maximum Java heap size
...

56
投票

如果使用spring-boot plugin启动应用程序:

spring-boot

否则,如果mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev

running java -jar

38
投票

因为这是一个特别的Spring Boot问题,所以我认为比@DaveSyer的答案更有用的答案是这样的:

您可以将java -jar文件拖放到与WAR相同的目录中,该文件实际上是Shell脚本。

例如

java -Xmx512m -Dspring.profiles.active=dev -jar app.jar

您在此处所做的任何配置都将在Spring Boot嵌入式Tomcat启动之前运行。就个人而言,我对应用程序本身中的.conf文件进行版本控制,然后将其副本放置到部署到的每个服务器上。

当然,您在$ ls myapp.conf myapp.war $ cat myapp.conf export JAVA_OPTS="-Xmx1024m -Xms256m" 文件中设置的任何内容都可以通过命令行操作覆盖。


9
投票

对于.conf.example,您必须在.conf中指定堆大小,如下所示:

Spring Boot 2

2
投票

对于Spring Boot 1,要在插件配置中指定的Maven参数为pom.xml,用户属性为 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments>-Xmx64m</jvmArguments> </configuration> </plugin>

jvmArguments

对于Spring Boot 2,在插件配置中指定的Maven参数也是run.jvmArguments,但用户属性现在是run.jvmArguments

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

因此,如果您使用插件配置方式,对于Spring Boot 1和2,您都可以这样做:

jvmArguments
© www.soinside.com 2019 - 2024. All rights reserved.