java.lang.OutOfMemoryError: Maven'de Java yığın alanı


123

Maven testini çalıştırdığımda java.lang.OutOfMemoryError oluşuyor. Çözümler için google'da aradım ve denedim export MAVEN_OPTS=-Xmx1024m, ama işe yaramadı. Bu sorun için başka çözümler bilen biri, BTW maven 3.0 kullanıyorum

Şimdiden teşekkürler

"Mvn test -e" komutunu çalıştırdığınızda hata mesajını buraya yapıştırın

Başarısız testler:
  uyarısı (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Çalıştırılan testler: 11, Başarısızlıklar: 3, Hatalar: 0, Atlanan: 0

10/11/01 13:37:18 INFO executionengine.HExecutionEngine: hadoop fi'ye bağlanılıyor
le system at: file: ///
[BİLGİ] ----------------------------------------------- -------------------------
[BİLGİ] YAPI HATASI
[BİLGİ] ----------------------------------------------- -------------------------
[BİLGİ] Toplam süre: 30.063sn
[BİLGİ] Bitiş tarihi: Pzt Kasım 01 13:37:18 PDT 2010
[BİLGİ] Nihai Bellek: 3M / 6M
[BİLGİ] ----------------------------------------------- -------------------------
[HATA] org.apache.maven.plugins hedefi yürütülemedi: maven-surefire-plugin: 2.
5: proje dw.pig üzerinde test (varsayılan-test): Test hataları var.
[HATA]
[HATA] Lütfen E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports için bakın
r bireysel test sonuçları.
[HATA] -> [Yardım 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Hedef o yürütülemedi
rg.apache.maven.plugins: maven-surefire-plugin: 2.5: proje üzerinde test (varsayılan-test)
 dw.pig: Test hataları var.

Giriş için lütfen E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports'a bakın.
bireysel test sonuçları.
        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 adresinde
ct (LifecycleModuleBuilder.java:84)
        org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje adresinde
ct (LifecycleModuleBuilder.java:59)
        org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu adresinde
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 adresinde (DefaultMaven.java:151)
        org.apache.maven.cli.MavenCli.execute adresinde (MavenCli.java:445)
        org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168) adresinde
        org.apache.maven.cli.MavenCli.main adresinde (MavenCli.java:132)
        sun.reflect.NativeMethodAccessorImpl.invoke0 (Yerel Yöntem)
        sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
java: 39)
        sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces
sorImpl.java:25)
        java.lang.reflect.Method.invoke (Method.java:597)
        org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Laun
cher.java:290)
        org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav) adresinde
a: 230),
        org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
uncher.java:409)
        org.codehaus.plexus.classworlds.launcher.Launcher.main adresinde (Launcher.java:
352)
Nedeni: org.apache.maven.plugin.MojoFailureException: Test hataları var
.

Giriş için lütfen E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports'a bakın.
bireysel test sonuçları.
        org.apache.maven.plugin.surefire.SurefirePlugin.execute adresinde (SurefirePlugi
n.java:629)
        org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo'da (Varsayılan
BuildPluginManager.java:107)
        org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... 19 daha fazla
[HATA]
[HATA] Tam hata ayıklama günlüğünü etkinleştirmek için -X anahtarını kullanarak Maven'i yeniden çalıştırın.
[HATA]
[ERROR] Hatalar ve olası çözümler hakkında daha fazla bilgi için lütfen yeniden
d aşağıdaki makaleler:
[HATA] [Yardım 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

Belki testinizde hafıza sızıntısı var? Çöp toplanmasına rağmen,
javada

Yanıtlar:


158

Maven testini çalıştırdığımda java.lang.OutOfMemoryError oluşuyor. Çözümler için Google'da aradım ve MAVEN_OPTS = -Xmx1024m'yi dışa aktarmayı denedim, ancak işe yaramadı.

Kullanarak Xmxseçenekleri ayarlamak MAVEN_OPTSişe yarıyor, Maven'i başlatmak için kullanılan JVM'yi yapılandırıyor. Bununla birlikte, maven-surefire-eklentisi varsayılan olarak yeni bir JVM'yi çatallar ve MAVEN_OPTSbu nedenle geçilmez.

Maven-surefire-eklentisi tarafından kullanılan JVM'nin boyutunu yapılandırmak için aşağıdakilerden birini yapmanız gerekir:

  • değiştirmek forkModeiçin never(Maven'in testi izole edilmez, çünkü bir değil çok iyi bir fikir olan) ~ ya da ~
  • argLineparametreyi kullanın (doğru yol):

Daha sonraki durumda, bunun gibi bir şey:

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

Ama burada Stephen ile aynı fikirde olduğumu söylemeliyim, testinizden birinde büyük olasılıkla yanlış bir şeyler var ve daha fazla hafıza vermenin probleminizi "çözmek" (saklamak?) İçin doğru çözüm olduğundan emin değilim.

Referanslar


1
<configuration> etiketini yalnızca ana pom.xml içinde mi güncelliyorsunuz?
Kevin Meredith

3
forkModekullanımdan kaldırıldı: maven.apache.org/surefire/maven-surefire-plugin/…
Macarse

1
@Macarse forkModekullanımdan kaldırıldı, ancak yalnızca forkCountbenzer işlevselliğe sahip olanla değiştirileceğini düşünüyorum . MAVEN_OPTS'yi kullanmanın bir yolu, <argLine>${env.MAVEN_OPTS}</argLine>görünüşe göre bu, bilgisayardan bilgisayara değişebileceği için önerilmiyor ( stackoverflow.com/a/10463133/32453 ). Ayrıca jacoco kullanıyorsanız, argLine'ı farklı bir şekilde stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack

63

Maven'de yeni olanlar (benim gibi) için ponponun inşa bölümünde yer alan tüm yapılandırma burada. Şerefe.

<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

Muhtemelen sorun, Maven'den çalıştırmasını istediğiniz birim testlerinden birinde olabilir.

Bu nedenle, yığın boyutuyla uğraşmak yanlış bir yaklaşımdır. Bunun yerine, OOME'a neden olan birim testine bakmalı ve bunun birim testinin hatası mı yoksa test ettiği kod mu olduğunu anlamaya çalışmalısınız.

Yığın izlemesine bakarak başlayın. Bir tane yoksa, seçenekle mvn ... testtekrar çalıştırın -e.


@ Stephen, çalışma yapılandırmasında-Xmx1024m ayarını yaptıktan sonra test durumunu tutulmada geçebilirim, ancak konsolda "mvn testi" çalıştırdığımda, -e seçenekleri "mvn testi -DMAVEN_OPTS = -Xmx1024m eklediğimde bile her zaman OutOfMemoryError hatası veriyor "
zjffdu

2
@zjffdu - Benim amacımı tamamen kaçırdın! "-E" eklemenin amacı testlerin işe yaramasını sağlamak değildir. Neden çalışmadıklarını bulmaktır.
Stephen C

1
@zjffdu - bu durumda, diğer Java problemlerinde olduğu gibi bu konuda da zor yoldan hata ayıklamanız gerekir.
Stephen C

2
Tam bir tarayıcı ortamını simüle eden GWT test senaryolarını çalıştırırken bu sorunu yaşıyorum. Bazen yığın boyutunu artırmak normaldir.
djjeck

1
@djjeck - Evet bazen. Ancak çoğu zaman bunun doğru çözüm olduğunu düşünmüyorum.
Stephen C

8

Bu sorunu geçici olarak çözmek için aşağıdakilerin en hızlı yol olduğunu buldum:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"

6

Bu sorunu kendi tarafımda 2 yolla çözdüm:

  1. Bu yapılandırmayı pom.xml'ye eklemek

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. 1.6 yerine kullanılan JDK 1.7'ye geçin


2

Java.lang.OutOfMemoryError: Maven'deki Java yığın alanını çözmek için, pom'da aşağıdaki yapılandırmayı yapılandırmayı deneyin

<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
MaxPermSize'den bahsetmek için +1. Yetersiz bellek hatanız, birim testinizde yeni HiveContext oluşturmak gibi milyonlarca sınıfın yüklenmesinden kaynaklanıyorsa, bu sizin çözümünüzdür.
swdev

-2

Sadece yığın bellek değil. ayrıca maven'deki istisnayı çözmek için perma boyutunu artırın, bu değişkenleri ortam değişkeninde kullanın.

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

Misal :

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

O zaman hata "Java yığın alanı" değil, farklıdır.
Karl Richter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.