2012-08-13 12 views
25

Chcę uruchomić wbudowaną instancję tomcat7 bezpośrednio z maven za pomocą tomcat7-maven-plugin. Działa to dobrze, ale początkowo Tomcat nie ma wystarczającej ilości pamięci. Podejrzewam, że potrzebowałbym ustawićZwiększyć pamięć wtyczki tomcat7 maven?

, ale nie mogę wymyślić, jak to zrobić.

Dokumentacja mówi, że należy użyć elementu "systemProperties" w sekcji "konfiguracja" wtyczki. Jednak opcje są określone jako elementów XML i musiałby wyglądać tak:

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

Ale to oczywiście nie jest możliwe, gdyż łamie XML (XX jest interpretowany jako nazw).

Oczywiście mogę ominąć ten problem przez ustawienie zmiennej środowiskowej

MAVEN_OPTS=-XX:MaxPermSize=256m 

ale wolałbym, aby tylko zwiększyć ją do wbudowanego serwera Tomcat. Wszelkie pomysły, jak to zrobić?

Odpowiedz

2

Można ustawić właściwości w ten sposób

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

Bardzo fajnie, nawet jeśli w ogóle nie udokumentowano :-) – Sebi

+11

To w ogóle mi nie pomogło i naprawdę nie oczekiwałbym tego. Proces java już się rozpoczął i wydaje się, że [nawet jeśli rozwidlasz, nadal nie otrzymujesz nowego procesu java] (http://mojo.10943.n7.nabble.com/How-to-set-user- timezone-within-tomcat-maven-plugin-td36517.html). Więc myślę, że musisz ustawić maksymalne rozmiary sterty przed rozpoczęciem maven. Kiedy próbowałem użyć znacznika , aby ustawić rozmiar na 256, po uruchomieniu aplikacji zrobiłem maven-pid jstat -gccapacity i zobaczyłem, że mój max perm gen nadal wynosi tylko 82 kb. – rzrelyea

+18

dodanie tego do pom.xml nie będzie pracować, jest już za późno. Musisz przekazać takie parametry bezpośrednio do JVM, w Run -> Run configuration ...-> JRE tab -> VM Arguments. Można sprawdzić, co się dzieje z VisualVM (prosty profiler osadzony w Oracle JDK). –

13

Jak większość powiedział w komentarzach powyżej właściwości w pom.xml ma effct. Co pracował dla mnie było ustawienie moi MAVEN_OPTS

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

lub na systemie Windows w cmd terminala:

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

dla Mac Users/Linux, wystarczy dodać instrukcję Eksportuj do ~/.profile (lub podobny Nazwa pliku). Na przykład:

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

I ponownie uruchom powłokę.

+0

Oczywiście własność maven, o której wspomniałem w mojej odpowiedzi, nie zmienia pamięci dla procesu Mavena , ale dla procesu Tomcat rozpoczętego przez Mavena. Tak napisał oryginalny plakat: Jak zwiększyć pamięć o wtyczce tomcat7! – Sebi

+2

Problem polega na tym, że twoje rozwiązanie _Sebi_ nie * zmienia * pamięci rozpoczętego procesu Tomcat tak, jak już wspomniałeś _rzrelyea_, żaden osobny proces Tomcat nie jest w ogóle uruchomiony. –

+0

Należy zachować ostrożność, jeśli używasz "rozwidlonego" biegacza testu surefire, może on nie respektować MAVEN_OPTS ... http: //stackoverflow.com/questions/4066424/java-lang-outofmemoryerror-java-heap-space-in- maven – rogerdpack

0

Ten pracował dla mnie:

<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> 

Zaczyna się moje tomcat8 w nowym JVM z argumentami "-Xmx4096m".

+0

To jest świetne, z wyjątkiem tego, że nie jest to konfiguracja dla wtyczki tomcat7, która jest konfiguracją wtyczki ładunkowej. –

Powiązane problemy