Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在使用嵌入式Tomcat启动Spring引导应用程序时,如何配置堆大小?_Spring Boot_Heap Memory - Fatal编程技术网

Spring boot 在使用嵌入式Tomcat启动Spring引导应用程序时,如何配置堆大小?

Spring boot 在使用嵌入式Tomcat启动Spring引导应用程序时,如何配置堆大小?,spring-boot,heap-memory,Spring Boot,Heap Memory,我正在尝试将一个功能强大的web应用程序部署到生产环境中。该应用程序是用SpringBoot1.0.1构建的,默认的Tomcat7嵌入为应用服务器。当使用java-jar myapp.jar命令行启动应用程序时,我想为应用程序分配更大的内存 我应该使用参数如-Xms-Xmx还是使用环境变量如JAVA\u OPTS?我曾试图在文档或谷歌上寻找答案,但没有得到答案。有人能给点提示吗?只要使用任何正常的机制来设置JVM就行了。命令行上提供了文档: $ java -X ... -Xms<size&

我正在尝试将一个功能强大的web应用程序部署到生产环境中。该应用程序是用SpringBoot1.0.1构建的,默认的Tomcat7嵌入为应用服务器。当使用
java-jar myapp.jar
命令行启动应用程序时,我想为应用程序分配更大的内存


我应该使用参数如
-Xms-Xmx
还是使用环境变量如
JAVA\u OPTS
?我曾试图在文档或谷歌上寻找答案,但没有得到答案。有人能给点提示吗?

只要使用任何正常的机制来设置JVM就行了。命令行上提供了文档:

$ java -X
...
-Xms<size>        Set initial Java heap size
-Xmx<size>        Set maximum Java heap size
...
$java-X
...
-Xms设置初始Java堆大小
-Xmx设置最大Java堆大小
...

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

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

比如说,

$ ls
myapp.conf
myapp.war
$ cat myapp.conf
export JAVA_OPTS="-Xmx1024m -Xms256m"
您在那里执行的任何配置都将在Spring Boot embedded Tomcat启动之前运行。就我个人而言,我在应用程序本身中控制一个
.conf.example
文件的版本,然后在部署到的每台服务器上放置它的副本


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

如果使用以下命令启动应用程序:

否则,如果:


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

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

org.springframework.boot
springbootmaven插件
-Xmx64m

对于Spring Boot 1,要在插件配置中指定的Maven参数是
JVM参数
,用户属性是:

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

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

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

org.springframework.boot
springbootmaven插件
-Xms4048m
-Xmx8096m

这太漂亮了。它也适用于.jar文件。我想知道哪个版本可用?我尝试使用spring boot 1.5.9,但它没有在名为jar文件的.conf文件中选择conf:export JAVA_OPTS=“JAVA.net.preferIPv4Stack=true”。使用nohup使用java-jar执行。这似乎不适用于SpringBoot2.0.0.M6。指定它应该工作,但它不工作。我看到了两个选项,要么将配置指定到pom.xml中(有效),要么将Spring Boot Maven插件的版本指定为1.5.9-RELEASE(也有效)。对于一个版本来说,它是有效的,而对于2.0.3.0版本来说,它不是。张巴斯的答案中的解决方案是有效的。那么,我可以将它增加到比正常情况更多的程度吗(比如10倍)?应用程序、JVM或计算机的开销是多少?属性spring-boot.run.JVM参数有效。谢谢
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>-Xmx64m</jvmArguments>
    </configuration>
</plugin>
mvn spring-boot:run -Drun.jvmArguments="-Xms2048m -Xmx4096m"
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms2048m -Xmx4096m"
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Xms4048m
            -Xmx8096m
        </jvmArguments>
    </configuration>
</plugin>