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

use*_*360 31 heap-memory spring-boot xms

我正在尝试将Spring Boot驱动的Web应用程序部署到生产环境中.该应用程序使用Spring Boot 1.0.1构建,并将默认的Tomcat 7嵌入为应用程序服务器.我想用java -jar myapp.jar命令行启动应用程序时为应用程序分配更大的内存.
我应该使用JVM等参数-Xms -Xmx还是使用环境变量JAVA_OPTS?我试图在文档或谷歌中寻找答案,但没有得到答案.任何人都可以提供一些提示吗?

Nic*_*mak 56

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

mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev
Run Code Online (Sandbox Code Playgroud)

否则如果运行java -jar:

java -Xmx512m -Dspring.profiles.active=dev -jar app.jar
Run Code Online (Sandbox Code Playgroud)


ina*_*lus 37

由于这是一个Spring Boot问题,我认为比@ DaveSyer更有用的答案是:

您可以将.conf文件放在与WAR实际上是shell脚本相同的目录中.

例如

$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export JAVA_OPTS="-Xmx1024m -Xms256m"
Run Code Online (Sandbox Code Playgroud)

您在那里执行的任何配置都将在Spring Boot嵌入式Tomcat启动之前运行.就个人而言,我.conf.example在我的应用程序本身中对文件进行版本控制,然后在我部署到的每台服务器上删除它的副本.

当然,您在该.conf文件中设置的任何内容都可以通过命令行操作进行覆盖.

  • 这真是太美了.它也适用于.jar文件.我<3 Spring Boot (4认同)

Dav*_*yer 21

只需使用您设置JVM的常规机制即可.文档可在命令行中找到:

$ java -X
...
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
...
Run Code Online (Sandbox Code Playgroud)


dav*_*xxx 12

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

mvn spring-boot:run -Drun.jvmArguments="-Xms2048m -Xmx4096m"
Run Code Online (Sandbox Code Playgroud)

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

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms2048m -Xmx4096m"
Run Code Online (Sandbox Code Playgroud)

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

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Xms4048m
            -Xmx8096m
        </jvmArguments>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)


Zha*_*uzz 9

因为Spring Boot 2,您必须指定堆大小,pom.xml如下所示:

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>-Xmx64m</jvmArguments>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)