web-dev-qa-db-ger.com

Wie konfiguriere ich die Größe des Heapspeichers, wenn ich eine Spring Boot-Anwendung mit eingebettetem Tomcat starte?

Ich versuche, eine Spring Boot betriebene Web-App für die Produktion bereitzustellen. Die App wurde mit Spring Boot 1.0.1 erstellt und enthält standardmäßig Tomcat 7 als Anwendungsserver. Ich möchte der App mehr Speicher zuweisen, wenn ich die App mit der Befehlszeile Java -jar myapp.jar Starte.
Soll ich JVM Parameter wie -Xms -Xmx Oder Umgebungsvariable wie Java_OPTS Verwenden? Ich habe versucht, die Antwort in der Dokumentation oder bei Google zu suchen, aber keine Antwort erhalten. Kann mir jemand ein paar Hinweise geben?

29
user2912360

Verwenden Sie einfach den normalen Mechanismus, den Sie zum Einrichten der JVM verwenden würden. Dokumente sind in der Befehlszeile verfügbar:

$ Java -X
...
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
...
21
Dave Syer

Wenn Sie die App mit spring-boot Plugin :

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

Ansonsten, wenn mit Java -jar :

Java -Xmx512m -Dspring.profiles.active=dev -jar app.jar
52
Nicomak

Da dies speziell eine Spring Boot Frage ist, würde ich argumentieren, dass die folgende Antwort nützlicher ist als @ DaveSyer:

Du kannst ein .conf-Datei im selben Verzeichnis wie Ihre WAR-Datei, bei der es sich tatsächlich um ein Shell-Skript handelt.

z.B.

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

Jede Konfiguration, die Sie dort vornehmen, wird ausgeführt, bevor der in Spring Boot eingebettete Tomcat gestartet wird. Persönlich kontrolliere ich eine .conf.example -Datei in meiner App selbst, und legen Sie dann eine Kopie davon auf jedem Server ab, auf dem ich die Bereitstellung durchführe.

Natürlich alles, was Sie in diesem .conf-Datei kann mit Befehlszeilenoperationen überschrieben werden.

36
inanutshellus

Für Spring Boot 2 Müssen Sie die Heap-Größe in pom.xml Wie folgt angeben:

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

Für Spring Boot 1 ist das Maven-Argument, das in der Plugin-Konfiguration angegeben werden muss, jvmArguments und die Benutzereigenschaft ist run.jvmArguments :

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

Für Spring Boot 2 ist das Maven-Argument, das in der Plugin-Konfiguration angegeben werden muss, ebenfalls jvmArguments, aber die Benutzereigenschaft lautet jetzt spring-boot.run.jvmArguments :

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

Wenn Sie also die Plugin-Konfiguration verwenden, können Sie dies sowohl für Spring Boot 1 als auch für Spring Boot 2 tun:

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