2012-08-13 4 views
25

Ich möchte eine eingebettete Tomcat7-Instanz direkt aus Maven mit dem Tomcat7-Maven-Plugin starten. Dies funktioniert gut, aber der Tomcat gestartet scheint nicht genug Speicher zu haben. Ich vermute, dass ich würdeSpeicher von tomcat7 maven plugin erhöhen?

setzen, aber ich kann nicht herausfinden, wie es geht.

Die Dokumentation besagt, dass man das Element "systemProperties" im Abschnitt "configuration" des Plugins verwenden sollte. Allerdings sind die Optionen als XML-Elemente angegeben und würde so aussehen müssen:

<configuration> 
    <systemProperties> 
    <XX:MaxPermSize>256m</XX:MaxPermSize> 
    </systemProperties> 
</configuration> 

Aber das ist natürlich nicht möglich, da es die XML bricht (XX ist als Namensraum interpretiert).

Natürlich konnte ich dieses Problem umgehen, indem Umgebungsvariable

MAVEN_OPTS=-XX:MaxPermSize=256m 

aber ich würde es für den Embedded-Tomcat nur zu erhöhen bevorzugen. Irgendwelche Ideen, wie man das macht?

Antwort

2

Sie können die Eigenschaften auf diese Weise eingestellt

<configuration> 
    <systemProperties> 
    <JAVA_OPTS>-Xms256m -Xmx512m -XX:MaxPermSize=256m</JAVA_OPTS> 
    </systemProperties> 
</configuration> 
+2

Sehr cool, wenn auch überhaupt nicht dokumentiert :-) – Sebi

+11

Das funktionierte bei mir überhaupt nicht, und ich würde es nicht wirklich erwarten. Der Java-Prozess hat bereits begonnen und es scheint, dass [auch wenn Sie fork, Sie immer noch nicht einen neuen Java-Prozess erhalten] (http://mojo.10943.n7.nabble.com/How-to-set-user- timezone-in-tomcat-maven-plugin-td36517.html). Also ich denke, dass Sie die maximalen Heap-Größen festlegen müssen, bevor Sie Maven starten. Als ich versuchte, das Tag zu verwenden, um Dauerwelle Größe auf 256 zu setzen, tat ich eine jstat -gccapacity Maven-pid nach dem Starten der App und sah, dass meine maximale Perm-Gen war immer noch nur 82 kb – rzrelyea

+18

hinzufügen dies zu pom.xml nicht Arbeit, es ist zu spät. Sie müssen solche Parameter direkt an die JVM übergeben, im Run -> Run configurations ...-> JRE Registerkarte -> VM-Argumente. Sie können überprüfen, was mit VisualVM (einfacher Profiler, der in Ihr Oracle JDK eingebettet ist) passiert. –

13

Wie die meisten, die in den Kommentaren über die Eigenschaften in pom.xml keine effct hat. Was für mich gearbeitet einstellt meine MAVEN_OPTS

MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m" 

Oder unter Windows in einem cmd-Terminal:

set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m 

für Mac/Linux-Benutzer, fügen Sie einfach eine Exportrechnung zu Ihrem ~/.profile (oder ähnlich Dateiname). Zum Beispiel:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m" 

Und starten Sie Ihre Shell neu.

+0

Natürlich ändert die Maven Eigenschaft, die ich in meiner Antwort erwähnte, nicht den Speicher für den Maven Prozess , aber für den Tomcat-Prozess, der von Maven gestartet wurde. Das ist, was das ursprüngliche Plakat fragte: Wie man Gedächtnis von tomcat7 maven Plugin erhöht! – Sebi

+2

Das Problem ist, dass Ihre Lösung _Sebi_ nicht * den Speicher des gestarteten Tomcat-Prozesses ändert, wie _rzrelyea_ bereits oben erwähnt wurde, kein separater Tomcat-Prozess wird überhaupt gestartet. –

+0

Seien Sie vorsichtig, wenn Sie einen "fiktiven" todsicheren Test-Runner verwenden, der MAVEN_OPTS nicht respektiert ... http: //stackoverflow.com/questions/4066424/java-lang-outofmemoryerror-java-heap-space-in- maven – rogerdpack

0

Dieses ist für mich gearbeitet:

<plugin> 
    <groupId>org.codehaus.cargo</groupId> 
    <artifactId>cargo-maven2-plugin</artifactId> 
    <version>...</version> 
    <configuration> 
     <container>...</container> 
     <configuration> 
      <type>standalone</type> 
      <home>...</home> 
      <properties> 
       <cargo.jvmargs>-Xmx4096m</cargo.jvmargs> 
      </properties> 
     </configuration> 
     <deployables>...</deployables> 
    </configuration> 
</plugin> 

Es beginnt meine tomcat8 in einem neuen JVM mit dem Argument "-Xmx4096m" auf.

+0

Das ist toll, außer dass ist keine Konfiguration für das Tomcat7-Plugin, das eine Konfiguration für das Cargo-Plugin ist. –