Задайте размер подменю для процессов JVM для детей, которые Maven будет откручиваться

Я создаю приложение Maven Java на сервере сборки Jenkins. Я много раз сталкиваюсь с java.lang.OutOfMemoryError: PermGen space во время сборки Jenkins (но никогда не на моем локальном хосте), и, следовательно, он не работает с моей сборкой.

Я уже пробовал установить MAVEN_OPTS для Дженкинса: я вошел в JenkinsManage JenkinsConfigure systemGlobal MAVEN_OPTS и был установлен в -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:PermSize=512m. Несмотря на то, что он имеет большое значение, мы постоянно сталкиваемся с проблемами пространства PermGen. Я не хочу устанавливать MAVEN_OPTS на более высокое значение; Я не вижу, как мое приложение может потребовать свободного пространства, и я предпочел бы углубиться в проблему с высокой памятью.

В последнее время я думал, что, возможно, проблема с пространством в пермёне НЕ исходит от самого Maven, а скорее из одного из процессов JVM, которые Maven вращается (например: плагины). Я предлагаю эту гипотезу, потому что Maven все еще в состоянии выполнить тесты TestNG в порядке, несмотря на то, что уже плевали наши строки ошибок пространства пермг. Один такой плагин, который вызывает ошибку PermGen, Jetty:

Oct 31, 2012 7:55:37 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: handle failed
java.lang.OutOfMemoryError: PermGen space

Следовательно, я хотел бы знать:

Имеет ли переменная MAVEN_OPTS также применительно к дочерним JVM-процессам, которые отключают Maven? Если нет, то как установить параметры JVM для этих дочерних процессов, таких как Jetty?

ПРИМЕЧАНИЕ. Я использую Maven 3.0.4.

Ответ 1

Большинство плагинов Maven, которые порождают процессы Java, будут иметь свой собственный способ указания аргументов командной строки JVM. Например, вы можете сконфигурировать размеры кучи и высоты в процессах, созданных плагином Surefire, с помощью параметра конфигурации argLine (см. http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLine).

Плагин Jetty не порождает процессы, поэтому кучи и константы управляются аргументами JVM, предоставленными процессу Maven.

Если у вас закончилась нехватка памяти при работе с Jenkins, но не при запуске локально, проверьте MAVEN_OPTS, что Дженкинс переходит к Maven.

Ответ 2

Вы можете настроить параметры vm глобально (настройки) и переопределить их для любого задания сборки. Например. в заданиях на основе Maven поле MAVEN_OPTS скрыто в одном из "продвинутых" блоков.

Ответ 3

Как уже упоминалось ранее другим ответом, каждый процесс имеет свой собственный способ указания аргументов. В случае подпроцесса maven, порожденного Jenkins, настройка будет в конфигурации заданий под сборкой maven. Вам нужно нажать кнопку "Дополнительно" и установить опцию в поле MAVEN_OPTS. например: -XX:MaxPermSize=256m -Xms512m -Xmx1024m