Spring Boot 启动带有嵌入式Tomcat的Sping Boot 应用程序时,如何配置堆大小?

66bbxpm5  于 2023-01-02  发布在  Spring
关注(0)|答案(5)|浏览(215)

我正在尝试将基于Spring Boot的Web应用部署到生产环境。该应用使用Sping Boot 1.0.1构建,并将默认Tomcat 7嵌入为应用服务器。我希望在使用java -jar myapp.jar命令行启动应用时为该应用分配更大的内存。
我应该使用JVM参数(如-Xms -Xmx)还是使用环境变量(如JAVA_OPTS)?我试着在文档或谷歌中寻找答案,但没有得到答案。有人能给予一些提示吗?

vltsax25

vltsax251#

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

mvn spring-boot:run -Drun.jvmArguments="-Xmx512m" -Drun.profiles=dev

否则,如果运行java -jar

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

d7v8vwbk2#

由于这是一个明确的 * Spring Boot * 问题,我认为比@DaveSyer的答案更有用的答案是:
您可以将.conf文件放到与WAR文件相同的目录中,该文件实际上是一个shell脚本。
例如,

$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export JAVA_OPTS="-Xmx1024m -Xms256m"

您在那里所做的任何配置都将在Spring Boot嵌入式Tomcat启动之前运行。就我个人而言,我对应用程序本身中的.conf.example文件进行版本控制,然后将其副本放置在我部署到的每个服务器上。
当然,在.conf文件中设置的任何内容都可以用命令行操作覆盖。

balp4ylt

balp4ylt3#

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

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

8e2ybdfx4#

对于Sping Boot 2,您必须在pom.xml文件中指定堆大小,如下所示:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>-Xmx64m</jvmArguments>
    </configuration>
</plugin>
tvokkenx

tvokkenx5#

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

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

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

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

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

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Xms4048m
            -Xmx8096m
        </jvmArguments>
    </configuration>
</plugin>

相关问题