Странный Maven из-за ошибки памяти - PullRequest
5 голосов
/ 26 октября 2010

В настоящее время я пытаюсь построить свой проект, используя hudson для вызова maven.Я продолжаю получать проблему из-за ошибки памятки.Я установил xmx и xms во всех переменных среды, конфигурации hudson и конфигурации проекта hudson.Я установил xmx на 1500 МБ, что должно быть более чем достаточно, поскольку весь проект составляет менее 1000 МБ.Машина, используемая для создания проекта, является сервером, на котором хранится репозиторий Maven для группы.

Кто-нибудь сталкивался с такой же проблемой?Есть идеи, как это произошло?

Ответы [ 6 ]

11 голосов
/ 27 октября 2010

Если вы получаете OOM во время тестов, то вы должны сообщить плагину surefire: fork новая виртуальная машина для тестов:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <forkMode>once</forkMode>
        <argLine>-Xms512m -Xmx512m</argLine>
    </configuration>
</plugin>
6 голосов
/ 28 октября 2010

Спасибо всем за ответ на мой вопрос.Я решил проблему, сделав дамп кучи и проанализировав его.Я делаю дамп кучи, передавая следующие аргументы VM:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:/.

Затем я использую Eclipse Memory Analyzer , чтобы открыть файл java_pidxxxxx.hprof.

Я обнаружил, что прослушиватель, который мы использовали для перехвата исключения, не может перехватить исключение.Таким образом, исключение остается в виртуальной машине и, следовательно, происходит утечка памяти!

Еще раз спасибо за все ответы

1 голос
/ 26 октября 2010

Убедитесь, что у вас достаточно MaxPermSpace.Я столкнулся с проблемами, когда памяти, выделенной для JVM, было достаточно, но ошибка OutOfMemoryError была вызвана исчерпанием PermSpace.Это не так уж редко, когда мы имеем дело с компиляцией кода, особенно если он компилирует код, выбрасывает его и компилирует снова.Для получения дополнительной информации о настройке сборщика мусора (и памяти) ознакомьтесь со следующими ссылками:

В официальном документе по управлению памятью на страницах 16-17 в нем изложены возможные причины ошибок OutOfMemoryErrors.Еще одна защита - форкать процесс maven и / или компилятор.

0 голосов
/ 25 июня 2011

У меня такая же проблема. при попытке обработать код Хадсон (или JVM) выбрасывает Java из памяти. Решение: в configuration of plugin cobertura-maven-plugin используйте <maxmem>512m</maxmem>.

0 голосов
/ 26 октября 2010

Хадсон запускает отдельную задачу для запуска заданий Maven. Вам нужно будет настроить увеличение памяти в текстовом поле MAVEN_OPTS. Поле находится в отдельных окнах конфигурации задания.

Редактировать: следите за вашими комментариями. Вы случайно не раздули свой компилятор, не выполнили его отдельно или не испортили свой тест junit?

Попробуйте в конфигурации вашего компилятора (если она у вас есть):

<maxmem>512m</maxmem>
0 голосов
/ 26 октября 2010

Если вы используете JDK от Sun, то в Hudson / Управление Hudson / Конфигурация проекта Maven / Global MAVEN_OPTS установите следующее: -Xmx512m -XX: MaxPermSize = 256m

...