java.lang.OutOfMemoryError: Купольний простір Java в Maven


123

Коли я запускаю тест Maven, трапляється java.lang.OutOfMemoryError. Я google це для рішення та спробував export MAVEN_OPTS=-Xmx1024m, але це не вийшло. Хтось знає інші рішення цієї проблеми, BTW я використовую maven 3.0

Спасибі заздалегідь

Вставте сюди повідомлення про помилку під час запуску "mvn test -e"

Невдалі тести:
  попередження (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Пробіги: 11, Збої: 3, Помилки: 0, Пропущено: 0

10/11/01 13:37:18 INFO Executionengine.HExecutionEngine: Підключення до hadoop fi
le система за адресою: файл: ///
[ІНФОРМАЦІЯ] ----------------------------------------------- -------------------------
[ІНФОРМАЦІЯ] ЗБУДОВИЙ ЗБІР
[ІНФОРМАЦІЯ] ----------------------------------------------- -------------------------
[INFO] Загальний час: 30.063 с
[INFO] Завершено о: понеділок 01 листопада 13:37:18 PDT 2010
[ІНФОРМАЦІЯ] Кінцева пам'ять: 3М / 6М
[ІНФОРМАЦІЯ] ----------------------------------------------- -------------------------
[ПОМИЛКА] Не вдалося виконати ціль org.apache.maven.plugins: maven-surefire-плагін: 2.
5: тест (тест за замовчуванням) на проекті dw.pig: Є помилки тесту.
[ПОМИЛКА]
[ПОМИЛКА] Будь ласка, зверніться до E: \ Code \ Java \ робоча область \ dw.pig \ target \ surefire-звіти для
r індивідуальні результати тесту.
[ПОМИЛКА] -> [Довідка 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Не вдалося виконати ціль o
rg.apache.maven.plugins: maven-surefire-плагін: 2.5: тест (тест за замовчуванням) для проекту
 dw.pig: Є помилки тесту.

Зверніться до E: \ Code \ Java \ робоча область \ dw.pig \ target \ surefire-звіти для входу
результати роздільних випробувань.
        на org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 199)
        на org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 148)
        на org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 140)
        на org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:84)
        на org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:59)
        на org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild (LifecycleStarter.java:183)
        на org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Lifecycl
eStarter.java:161)
        на org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:314)
        на org.apache.maven.DefaultMaven.execute (DefaultMaven.java:151)
        на org.apache.maven.cli.MavenCli.execute (MavenCli.java:145)
        на org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168)
        на org.apache.maven.cli.MavenCli.main (MavenCli.java:132)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        у sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
java: 39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces
sorImpl.java:25)
        на java.lang.reflect.Method.invoke (Method.javajanju97)
        на org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Laun
cher.java:290)
        на org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav
a: 230)
        на org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
uncher.java:409)
        на org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:
352)
Викликано: org.apache.maven.plugin.MojoFailureException: Є помилки тесту
.

Зверніться до E: \ Code \ Java \ робоча область \ dw.pig \ target \ surefire-звіти для входу
результати роздільних випробувань.
        на org.apache.maven.plugin.surefire.SurefirePlugin.execute (SurefirePlugi
n.java:629)
        на org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (за замовчуванням
BuildPluginManager.java:107)
        на org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... ще 19
[ПОМИЛКА]
[ПОМИЛКА] Повторіть запуск Maven за допомогою перемикача -X, щоб увімкнути повний журнал налагодження.
[ПОМИЛКА]
[ПОМИЛКА] Щоб отримати докладнішу інформацію про помилки та можливі рішення, будь ласка, знову
d наступні статті:
[ПОМИЛКА] [Довідка 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

Можливо, у вас в тесті витік пам'яті? Незважаючи на те, що він збирає сміття, ви все ще можете створити витік пам'яті в java: ibm.com/developerworks/library/j-leaks
anio

Відповіді:


158

Коли я запускаю тест Maven, трапляється java.lang.OutOfMemoryError. Я google це для рішення та спробував експортувати MAVEN_OPTS = -Xmx1024m, але це не вийшло.

Встановлення Xmxпараметрів за допомогою MAVEN_OPTSдійсно працює, він налаштовує JVM, який використовується для запуску Maven. Коли це було сказано, плагін maven-surefire розкриває новий JVM за замовчуванням, і ваш MAVEN_OPTSтаким чином не передається.

Щоб налаштувати розмір JVM, який використовується плагіном maven-surefire, вам доведеться:

  • змінити forkModeна never(що не дуже гарна ідея, оскільки Мейвен не буде ізольований від тесту) ~ або ~
  • використовувати argLineпараметр (правильний шлях):

У подальшому випадку щось подібне:

<configuration>
  <argLine>-Xmx1024m</argLine>
</configuration>

Але я мушу сказати, що я схильний погоджуватися зі Стівеном тут, мабуть, щось не так з одним із ваших тестів, і я не впевнений, що давати більше пам’яті - це правильне рішення «вирішити» (приховати?) Вашу проблему.

Список літератури


1
Чи оновлюєте тег <configuration> лише у своєму батьківському pom.xml?
Кевін Мередіт


1
@Macarse forkModeзастарілий, але я думаю, що його слід замінити лише тим, forkCountщо має аналогічну функціональність. Один із способів використання MAVEN_OPTS є, <argLine>${env.MAVEN_OPTS}</argLine>але це, мабуть, не рекомендується, оскільки він може відрізнятися від комп'ютера до комп'ютера ( stackoverflow.com/a/10463133/32453 ). Також зверніть увагу , що якщо ви використовуєте jacoco ви повинні безлічі argLine інший спосіб stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack

63

Для тих, хто не знайшов Maven (як я), ось цілий конфігурація, що входить до розділу збирання вашого пом. Ура.

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <argLine>-Xmx1024m</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>

12

Цілком ймовірно, що проблема полягає в одному з тестових модулів, які ви попросили Maven запустити.

Таким чином, навпаки розміру купи - це неправильний підхід. Натомість ви повинні дивитись на тест одиниці, який спричинив OOME, і намагаєтесь з’ясувати, чи не винна це одинична перевірка чи код, який вона тестує.

Почніть з перегляду сліду стека. Якщо такої немає, запустіть mvn ... testще раз цю -eопцію.


@ Stephen, я можу передати тестовий випадок у затемненні після того, як я встановив-Xmx1024m у конфігурації запуску, але він завжди викидає OutOfMemoryError, коли я запускаю "mvn test" в консолі, навіть коли я додаю параметри -e "mvn test -DMAVEN_OPTS = -Xmx1024m "
zjffdu

2
@zjffdu - Ви повністю пропустили мою думку! Мета додавання "-e" - не змусити тести працювати. Це з’ясувати, чому вони не працюють.
Стівен C

1
@zjffdu - у цьому випадку вам доведеться налагодити це важким способом, як і інші проблеми з Java.
Стівен C

2
Цю проблему я отримую під час запуску тестових випадків GWT, які імітують повне середовище браузера. Іноді нормально збільшити розмір купи.
djjeck

1
@djjeck - Так, іноді. Але я не думаю, що це правильне рішення більшість часу.
Стівен C

8

Щоб тимчасово вирішити цю проблему, я виявив, що найшвидший спосіб:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"

6

Я вирішив цю проблему на моєму боці двома способами:

  1. Додавання цієї конфігурації в pom.xml

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Перейдіть на використаний JDK 1.7 замість 1.6


2

Для того, щоб вирішити java.lang.OutOfMemoryError: Куповий простір Java в Maven, спробуйте налаштувати нижче конфігурацію в pom

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${maven-surefire-plugin.version}</version>
     <configuration>
        <verbose>true</verbose>
        <fork>true</fork>
        <argLine>-XX:MaxPermSize=500M</argLine>
    </configuration>
</plugin>

1
+1 для згадування MaxPermSize. Якщо ваша помилка в пам'яті викликана завантаженням базових мільйонів класів, як-от створення нового HiveContext у вашому тесті одиниць, це ваше рішення.
swdev

-2

Не тільки купи пам'яті. також збільшити розмір perm для вирішення цього винятку в maven використанні цих змінних у змінної середовища.

variable name: MAVEN_OPTS
variable value: -Xmx512m -XX:MaxPermSize=256m

Приклад:

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

Тоді помилка не була б "купою простору Java", а іншою.
Карл Ріхтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.