java.lang.OutOfMemoryError: Java heap space trong Maven


123

Khi tôi chạy kiểm tra maven, java.lang.OutOfMemoryError xảy ra. Tôi đã google nó để tìm giải pháp và đã cố gắng export MAVEN_OPTS=-Xmx1024m, nhưng nó không hoạt động. Bất cứ ai biết các giải pháp khác cho vấn đề này, BTW Tôi đang sử dụng maven 3.0

Cảm ơn trước

Dán thông báo lỗi vào đây khi chạy "mvn test -e"

Kiểm tra không thành công:
  cảnh báo (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Kiểm tra chạy: 11, Lỗi: 3, Lỗi: 0, Đã bỏ qua: 0

10/11/01 13:37:18 INFO executiveonengine.HExecutionEngine: Kết nối với hadoop fi
le system at: file: ///
[THÔNG TIN] ----------------------------------------------- -------------------------
[INFO] XÂY DỰNG THẤT BẠI
[THÔNG TIN] ----------------------------------------------- -------------------------
[INFO] Tổng thời gian: 30.063 giây
[INFO] Hoàn thành lúc: Thứ Hai, ngày 01 tháng 11 13:37:18 PDT 2010
[INFO] Bộ nhớ cuối cùng: 3M / 6 triệu
[THÔNG TIN] ----------------------------------------------- -------------------------
[LỖI] Không thực thi được mục tiêu org.apache.maven.plugins: maven-surefire-plugin: 2.
5: kiểm tra (default-test) trên dw.pig dự án: Có những lỗi kiểm tra.
[LỖI]
[LỖI] Vui lòng tham khảo E: \ Code \ Java \ workspace \ dw.pig \ target \ chắc chắn-báo cáo cho
r các kết quả kiểm tra cá nhân.
[ERROR] -> [Trợ giúp 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Không thực hiện được mục tiêu o
rg.apache.maven.plugins: maven-surefire-plugin: 2.5: test (default-test) trên dự án
 dw.pig: Có lỗi kiểm tra.

Vui lòng tham khảo E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-báo cáo để biết
kết quả thử nghiệm chia hết.
        tại org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 199)
        tại org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 148)
        tại org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 140)
        tại org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:84)
        tại org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:59)
        tại org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild (LifecycleStarter.java:183)
        tại org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Lifecycl
eStarter.java:161)
        tại org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:314)
        tại org.apache.maven.DefaultMaven.execute (DefaultMaven.java:151)
        tại org.apache.maven.cli.MavenCli.execute (MavenCli.java:445)
        tại org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168)
        tại org.apache.maven.cli.MavenCli.main (MavenCli.java:132)
        at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
java: 39)
        at sun.reflect.DelectingMethodAccessorImpl.invoke (DelegateMethodAcces
sorImpl.java:25)
        tại java.lang.reflect.Method.invoke (Method.java:597)
        tại org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Laun
cher.java:290)
        tại org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav
a: 230)
        tại org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
unher.java:409)
        tại org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:
352)
Gây ra bởi: org.apache.maven.plugin.MojoFailureException: Có lỗi kiểm tra
.

Vui lòng tham khảo E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-báo cáo để biết
kết quả thử nghiệm chia hết.
        tại org.apache.maven.plugin.surefire.SurefirePlugin.execute (SurefirePlugi
n.java:629)
        tại org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (Mặc định
BuildPluginManager.java:107)
        tại org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... 19 nữa
[LỖI]
[LỖI] Chạy lại Maven bằng cách sử dụng công tắc -X để bật ghi nhật ký gỡ lỗi đầy đủ.
[LỖI]
[ERROR] Để biết thêm thông tin về các lỗi và các giải pháp khả thi, vui lòng rea
d các bài viết sau:
[LỖI] [Trợ giúp 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

Có thể bạn bị rò rỉ bộ nhớ trong bài kiểm tra của mình? Mặc dù nó đang được thu thập rác, bạn vẫn có thể tạo rò rỉ bộ nhớ trong java: ibm.com/developerworks/library/j-leaks
anio

Câu trả lời:


158

Khi tôi chạy kiểm tra maven, java.lang.OutOfMemoryError xảy ra. Tôi đã google nó để tìm giải pháp và đã cố gắng xuất MAVEN_OPTS = -Xmx1024m, nhưng nó không hoạt động.

Thiết lập các Xmxtùy chọn bằng cách sử dụng MAVEN_OPTSkhông hoạt động, nó cấu hình JVM được sử dụng để khởi động Maven. Điều đó được cho biết, các maven-surefire-cắm dĩa một JVM mới theo mặc định, và bạn MAVEN_OPTSđang do đó không được thông qua.

Để định cấu hình kích thước của JVM được sử dụng bởi plugin maven-surefire-, bạn sẽ phải:

  • thay đổi forkModethành never(không phải là một ý kiến ​​hay vì Maven sẽ không bị cô lập khỏi bài kiểm tra) ~ hoặc ~
  • sử dụng argLinetham số (đúng cách):

Trong trường hợp sau, một cái gì đó như thế này:

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

Nhưng tôi phải nói rằng tôi có xu hướng đồng ý với Stephen ở đây, rất có thể có điều gì đó không ổn với một trong những bài kiểm tra của bạn và tôi không chắc rằng việc cho thêm bộ nhớ là giải pháp phù hợp để “giải quyết” (ẩn?) Vấn đề của bạn.

Người giới thiệu


1
Bạn có cập nhật thẻ <configuration> chỉ trong pom.xml mẹ của bạn không?
Kevin Meredith

3
forkModeđã không được dùng nữa: maven.apache.org/surefire/maven-surefire-plugin/…
Macarse

1
@Macarse forkModeđã không được dùng nữa, nhưng tôi nghĩ chỉ được thay thế bằng @Macarse có forkCountchức năng tương tự. Bạn có thể sử dụng MAVEN_OPTS một cách <argLine>${env.MAVEN_OPTS}</argLine>nhưng điều đó dường như không được khuyến khích vì nó có thể khác nhau giữa các máy tính ( stackoverflow.com/a/10463133/32453 ). Cũng lưu ý rằng nếu bạn đang sử dụng jacoco bạn đang nghĩ đến bộ argLine một khác nhau cách stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack

63

Đối với những người mới sử dụng Maven (như tôi), đây là toàn bộ cấu hình có trong phần xây dựng của pom của bạn. Chúc mừng.

<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

Rất có thể vấn đề nằm ở một trong những bài kiểm tra đơn vị mà bạn đã yêu cầu Maven chạy.

Do đó, việc loay hoay với kích thước đống là cách tiếp cận sai lầm. Thay vào đó, bạn nên xem xét đơn vị kiểm tra đã gây ra OOME và cố gắng tìm hiểu xem đó là lỗi của kiểm tra đơn vị hay mã mà nó đang kiểm tra.

Bắt đầu bằng cách xem xét dấu vết ngăn xếp. Nếu không có, hãy chạy mvn ... testlại với -etùy chọn.


@ Stephen, tôi có thể vượt qua trường hợp kiểm tra trong eclipse sau khi tôi đặt-Xmx1024m trong cấu hình chạy, nhưng nó luôn phát ra lỗi OutOfMemoryError khi tôi chạy "kiểm tra mvn" trong bảng điều khiển, ngay cả khi tôi thêm -e tùy chọn "mvn kiểm tra -DMAVEN_OPTS = -Xmx1024m "
zjffdu

2
@zjffdu - Bạn hoàn toàn bỏ sót quan điểm của tôi! Mục đích của việc thêm "-e" không phải để làm cho các bài kiểm tra hoạt động. Đó là tìm ra lý do tại sao chúng không hoạt động.
Stephen C

1
@zjffdu - trong trường hợp đó, bạn sẽ cần phải gỡ lỗi điều này một cách khó khăn, giống như các vấn đề Java khác.
Stephen C

2
Tôi gặp sự cố này khi chạy các trường hợp thử nghiệm GWT, mô phỏng môi trường trình duyệt đầy đủ. Đôi khi, bạn có thể tăng kích thước đống.
djjeck

1
@djjeck - Có đôi khi. Nhưng tôi không nghĩ đó là giải pháp đúng trong hầu hết thời gian.
Stephen C

8

Để tạm thời khắc phục sự cố này, tôi thấy cách sau là cách nhanh nhất:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"

6

Tôi đã giải quyết vấn đề này bên mình bằng 2 cách:

  1. Thêm cấu hình này trong pom.xml

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Chuyển sang JDK 1.7 đã sử dụng thay vì 1.6


2

Để giải quyết java.lang.OutOfMemoryError: Java heap space trong Maven, hãy thử đặt cấu hình bên dưới trong 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 khi đề cập đến MaxPermSize. Nếu lỗi hết bộ nhớ của bạn là do tải các lớp bazillion như tạo HiveContext mới trong bài kiểm tra đơn vị của bạn, thì đây là giải pháp của bạn.
swdev

-2

Không chỉ bộ nhớ đống. cũng tăng kích thước hoán vị để giải quyết ngoại lệ đó trong maven sử dụng các biến này trong biến môi trường.

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

Thí dụ :

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

Sau đó, lỗi sẽ không phải là "Java heap space", nhưng khác.
Karl Richter,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.