VM ที่มีการยกเลิกถูกยกเลิกโดยไม่บอกลาอย่างเหมาะสม VM crash หรือ System.exit ชื่อ


192

โปรดช่วยฉันแก้ปัญหานี้ ฉันไม่เข้าใจว่าข้อผิดพลาดในบันทึกหมายถึงอะไร

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 21.749s
[INFO] Finished at: Thu Apr 24 10:10:20 IST 2014
[INFO] Final Memory: 15M/37M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test (default-test) on project samples.simpleforwarding: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
[ERROR] Command wascmd.exe /X /C ""C:\Program Files\Java\jdk1.7.0_55\jre\bin\java" -Xmx1024m -XX:MaxPermSize=256m -jar E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefirebooter53410321571238933.jar E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefire86076271125218001tmp E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefire_01846991116135903536tmp"
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

7
โปรดเรียกใช้ Maven อีกครั้งด้วย -e และ -X เช่นผลลัพธ์ที่แนะนำและวางสิ่งที่ให้คุณ นอกจากนี้คุณกำลังสร้างรหัสของคุณเองหรือห้องสมุดที่มีอยู่? หากคุณกำลังสร้างรหัสของคุณเองคุณโทรหา System.exit (int) หรือไม่? หากคุณกำลังสร้างห้องสมุดที่มีอยู่คุณจะหาแหล่งที่มาได้จากที่ใด
Dylon

@Dylon Edwards: เป็นซอร์สโค้ดที่มีอยู่โครงการ OpenDayLight สำหรับการนำ SDN ไปใช้
astack

สถานการณ์ล่าสุดที่ฉันมีที่ทำให้เกิดปัญหาอีกครั้งคือเมื่อฉันรันชุดทดสอบจากไฟล์ xml ในกรณีที่ไฟล์ xml กำหนดคลาสที่ไม่มีอยู่อีกต่อไปหรืออ้างถึงชื่อที่ผ่านการรับรองโดยสมบูรณ์ของคลาสที่ถูกย้ายแล้ว JVM ไม่สามารถโหลดคลาสได้ ผลลัพธ์นี้เป็นข้อความแปลก ๆ ที่คุณสังเกตเห็น การดูสแต็กการติดตามอย่างใกล้ชิดยิ่งขึ้นสามารถช่วยคุณระบุปัญหาดังกล่าวได้โดยไม่จำเป็นต้องผ่านสวิตช์ -e หรือ -X ในกรณีนี้
Ivaylo Slavov

@astack สิ่งที่ออกมาเป็นทางออกสำหรับสิ่งนี้? คุณสามารถทำเครื่องหมายคำตอบหรือเขียนข้อความของคุณเองได้
Naman

คำตอบ:


122

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยการเพิ่ม:

<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>

องค์ประกอบปลั๊กอินทั้งหมดคือ:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <forkCount>3</forkCount>
    <reuseForks>true</reuseForks>
    <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
  </configuration>
</plugin>

7
+1 ฉันใช้ข้อมูลโค้ดนี้เป็นคำต่อคำและแก้ไขปัญหาของฉันกับ Travis-CI เราไม่ได้รับสิ่งนี้ในเวิร์กสเตชันของนักพัฒนาของเรา
StartupGuy

7
ข้างต้นไม่ได้แก้ไขปัญหาสำหรับฉัน ปัญหานี้ 'อาจ' เกิดขึ้นเมื่อหนึ่งในการพึ่งพา (jar ฯลฯ ) ใน.m2เสียหาย การลบ ~ / .m2 / พื้นที่เก็บข้อมูลrm -rf ~/.m2/repositoryแล้วจึงmvn installแก้ไขให้ฉัน
ch4nd4n

2
คัดลอกและวางสิ่งนี้ลงในไฟล์ pom ของฉันและใช้งานได้อย่างมีเสน่ห์ขอบคุณ
Flaom

8
คำเตือน OpenJDK เซิร์ฟเวอร์ 64 บิต VM: การเพิกเฉยตัวเลือก MaxPermSize = 256m; การสนับสนุนถูกลบใน 8.0
Julien

2
ใครช่วยอธิบายสิ่งที่มันทำจริงและสิ่งที่มีผลกระทบ?
borgmater

72

ในกรณีของฉันปัญหาเกี่ยวข้องกับการบันทึกที่ยาวเกินไปในคอนโซล IntelliJ IDEA (ระบบปฏิบัติการ windows 10)

คำสั่ง:

mvn clean install

คำสั่งนี้แก้ไขปัญหาให้ฉัน:

mvn clean install > log-file.log

บันทึกที่ยาวเกินไปก็เป็นปัญหาสำหรับฉันเช่นกัน! การเปลี่ยนเส้นทางไปยังล็อกไฟล์ไม่ได้ช่วยอะไร การเปลี่ยนคำสั่งการบันทึกที่พบบ่อยที่สุดบางส่วนจากข้อมูลเป็นดีบั๊กแก้ปัญหาได้
RvPr

7
การบันทึกมากเกินไปเป็นปัญหาจริงในกรณีของฉัน !!
Changwon Choe

1
อย่าลืมข้อผิดพลาดในการสตรีมด้วย: mvn clean test 2> err.txt 1> out.txt หรือ mvn clean test> out.txt 2> & 1 หรือ mvn clean test 2> & 1 | tee out.txt ขณะเปลี่ยนเส้นทางคุณสามารถรับชมเอาต์พุตในคอนโซลอื่นที่มีน้อยกว่า + F out.txt
radzimir

1
สำหรับฉันการเปลี่ยนจาก windows cmd เป็น Intellij console จะแก้ไขได้
บรอกโคลี

3
แน่นอนการเปลี่ยนเส้นทางไปยังล็อกไฟล์ช่วยแก้ไขปัญหานี้
horizon7 7

41

ฉันมีปัญหาที่คล้ายกันมาก ( Maven build และ maven-failafe-plugin - VM ที่แยกออกจากกันโดยไม่บอกลา ) และพบวิธีแก้ไขปัญหาสามข้อที่ใช้งานได้สำหรับฉัน:

คำอธิบายปัญหา

ปัญหาเกิดขึ้นกับ maven plugin maven-surefire-pluginเฉพาะในรุ่น 2.20.1 และ 2.21.0 ฉันตรวจสอบแล้วและคุณใช้รุ่น 2.20.1

โซลูชันที่ 1

ปรับรุ่นปลั๊กอิน2.22.0 เพิ่มในpom.xml :

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.0</version>
</plugin>

โซลูชันที่ 2

การปรับลดรุ่นปลั๊กอิน2.20 เพิ่มในpom.xml :

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.20</version>
</plugin>

โซลูชันที่ 3

การกำหนดค่าใช้ปลั๊กอินtestFailureIgnore เพิ่มในpom.xml :

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <testFailureIgnore>true</testFailureIgnore>
  </configuration>
</plugin>

สำหรับฉันการรวมกันนี้ทำงานได้ขอบคุณ: <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven-surefire-plugin </artifactId> <version> 2.22.1 </version> <configuration> < testFailureIgnore> true </testFailureIgnore> </configuration> </plugin>
Abhishek

ขอบคุณสำหรับการนี้โดยใช้maven:3.6.0-jdk-10ภาพเทียบท่าและการอัพเกรดไปเป็นเวอร์ชั่น3.0.0-M3ของmaven-surefire-pluginมติให้ฉันเช่นกัน
danialk

20
เกี่ยวกับโซลูชันที่ 3: เราสามารถพูดได้จริงหรือไม่ว่าการเพิกเฉยต่อความล้มเหลวในการทดสอบเป็นวิธีแก้ปัญหา มีจุดทดสอบอะไรถ้าผลลัพธ์ของพวกเขาไม่มีความหมาย?
อูลูไก

ฉันเพิ่งอัพเกรด maven-surefire-plugin เป็น 2.22.2 และใช้งานได้ดี!
Krzysztof Walczewski

ได้! การอัพเกรดเป็น Surefire v2.22.2 ได้แก้ไขให้ฉันด้วย ขอบคุณ!
Migs

32

ณ วันนี้ (30/30/2018) เราสังเกตว่างานสร้างของเราแตกเป็นเสี่ยง ๆ ในเจนกินส์โดยมีข้อผิดพลาดนี้

ข้อผิดพลาดเป็นบิตที่ทำให้เข้าใจผิดและจำเป็นต้องดูผลลัพธ์ของการถ่ายโอนข้อมูลในtarget/surefire-reports/ เพื่อดูข้อความแสดงข้อผิดพลาดต่อไปนี้:

Error: Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter

ที่ทำให้ฉันไปโพสต์ดังต่อไปนี้ซึ่งกล่าวถึงข้อผิดพลาดที่เป็นไปได้ใน OpenJDK 181: Maven surefire ไม่สามารถหาชั้น ForkedBooter

การแก้ไขอย่างใดอย่างหนึ่งในโพสต์นั้นแก้ปัญหาของฉันได้ เพื่อเจาะจงฉันใช้อย่างใดอย่างหนึ่งต่อไปนี้:

  1. เปลี่ยนจากสิ่งปลูกสร้างในคอนเทนเนอร์นักเทียบท่าmaven:3.5.4-jdk-8เป็นmaven:3.5.4-jdk-8-alpine
  2. การเอาชนะคลาสโหลดเดอร์ของ Spring Boot มีรายละเอียดที่นี่: https://stackoverflow.com/a/50661649/1228408

1
ขอบคุณ การเปลี่ยนจาก 1.8.0_161-b12 เป็น 11.0.1 + 13 ช่วยในกรณีของเรา
Karussell

1
นี่เป็นปัญหาที่ฉันต้องเผชิญกับเจนกินส์และได้รับการแก้ไขแล้วในตอนนี้ ขอบคุณ
Vighnesh Pai

OP มีข้อความแสดงข้อผิดพลาดอื่น:The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
PetroCliff

1
@ PetroCliff ฉันยอมรับว่านั่นเป็นข้อผิดพลาดที่ฉันได้รับเมื่อฉันพูดว่า "เราสังเกตเห็นว่างานสร้างของเราแตกใน Jenkins ด้วยข้อผิดพลาดนี้ " surefire-reportsจากนั้นผมก็เดินไปอธิบายว่าข้อผิดพลาดที่ถูกทำให้เข้าใจผิดและข้อผิดพลาดที่เกิดขึ้นจริงใน
majikman

25

ส่วนหนึ่งของคำถามที่พบบ่อยของSurefireสามารถช่วยคุณได้:

Surefire ล้มเหลวด้วยข้อความ "VM ที่ถูกแฮ็กสิ้นสุดลงโดยไม่บอกลาอย่างถูกต้อง"

Surefire ไม่สนับสนุนการทดสอบหรือไลบรารีอ้างอิงใด ๆ ที่เรียก System.exit () ได้ตลอดเวลา หากพวกเขาทำเช่นนั้นพวกเขาจะเข้ากันไม่ได้กับ surefire และคุณควรยื่นปัญหากับห้องสมุด / ผู้ขาย อีกทางหนึ่งคือ VM ที่มีการแยกอาจล้มเหลวด้วยเหตุผลหลายประการซึ่งอาจทำให้ปัญหานี้เกิดขึ้น ค้นหาไฟล์ "hs_err *" แบบคลาสสิกที่ระบุว่า VM ล่มหรือตรวจสอบเอาต์พุตบันทึกจากการรัน maven เมื่อการทดสอบดำเนินการ เอาต์พุต "พิเศษ" บางตัวจากกระบวนการหยุดทำงานอาจถูกดัมพ์ไปยังคอนโซล / บันทึก หากสิ่งนี้เกิดขึ้นในสภาพแวดล้อม CI และหลังจากผ่านไประยะหนึ่งก็มีโอกาสพอสมควรที่ชุดทดสอบของคุณกำลังรั่วทรัพยากรระดับ OS บางประเภทซึ่งทำให้สิ่งเลวร้ายลงสำหรับการทำงานทุกครั้ง เครื่องมือตรวจสอบระดับระบบปฏิบัติการปกติอาจบอกให้คุณทราบ


9

ประสบปัญหาเดียวกัน, java 8 บน Ubuntu

จากนั้นเจอhttps://stackoverflow.com/a/53016532/1676516

ดูเหมือนว่าข้อผิดพลาดล่าสุดในปลั๊กอิน surefire เวอร์ชัน 2.22.1 พร้อมจาวา 8 https://issues.apache.org/jira/browse/SUREFIRE-1588

ปฏิบัติตามวิธีแก้ปัญหาที่แนะนำผ่านการตั้งค่า mvn ท้องถิ่น ~/.m2/settings.xml

<profiles>
    <profile>
        <id>SUREFIRE-1588</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
        </properties>
    </profile>
</profiles>

1
การเพิ่มรุ่นล่าสุดอย่างง่ายขึ้น 3.0.0-M1 (เช่น) ได้ช่วยแก้ปัญหาแล้ว
กาแล็กซี่

6

Cannot use a threadCount parameter less than 1; 1 > 0ฉันมีปัญหาเดียวกันในวันนี้และสำหรับฉันปัญหาที่แท้จริงคือการรายงานขึ้นต่อไปในบันทึกด้วยข้อความ เมื่อเพิ่ม<threadCount>1</threadCount>ปลั๊กอินการตั้งค่า surefire ข้อผิดพลาดอื่น ๆ หายไป

กำหนดค่าปลั๊กอินแบบเต็ม:
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>2.18.1</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-testng</artifactId>
                    <version>2.18.1</version>
                </dependency>
            </dependencies>
            <configuration>
                <threadCount>1</threadCount>
            </configuration>
        </plugin>

... และใช่ฉันใช้ทั้ง junit และ testng ในกรอบการทดสอบนี้ด้วยเหตุผลด้านความเข้ากันได้แบบย้อนหลัง


6

มีปัญหาที่คล้ายกันเมื่อเรียกใช้คำสั่ง mvn กับ Jacoco plugin บน JDK 1.8.0_ 65

[INFO]
A fatal error has been detected by the Java Runtime Environment:

JRE version: Java(TM) SE Runtime Environment (8.0_65-b17) (build 1.8.0_65-b17).........
Problematic frame:
PhaseIdealLoop::build_loop_late_post(Node*)+0x144
............
............
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test (default-test) on project 

 The forked VM terminated without properly saying goodbye. VM crash or System.exit called?

มีข้อผิดพลาดใน JDK https://bugs.openjdk.java.net/browse/JDK-8081379

และวิธีแก้ไขก็คือให้ทำการติดตั้ง mvn clean ด้วย param -XX: -UseLoopPredicate

หรือแค่อัปเดตเป็น JDK (ฉันคิดว่ารุ่นรองรุ่นใหม่จะใช้งานได้)


6

ปิด useSystemClassLoader ของ maven-surefile-plugin น่าจะช่วยได้

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.0</version>
            <configuration>
                <useSystemClassLoader>false</useSystemClassLoader>
            </configuration>
        </plugin>

1
นี่คือสิ่งที่แก้ไขให้ฉัน ฉันได้สร้าง maven ผ่านทางวัตถุในภาพนักเทียบท่าที่รอคิวจาก gitlab มันยากที่จะทำให้การตั้งค่าตัวแทนทำงานได้และหลังจากลองใช้ตัวเลือกมากมายสำหรับการตั้งค่า Surefire อันนี้จะแก้ไขด้วยเวอร์ชัน 2.22.0
Richard Bown

1
ต้องเพิ่มตัวเลือกนี้สำหรับงาน maven ทุกครั้งใน Gitlab CI และไม่มีเหตุผลว่าทำไม
cljk

5

หากใครรวมถึงอาร์กิวเมนต์ argLine ที่กำหนดเองคุณต้องพิจารณาอีกครั้งเพราะมันอาจเป็นสาเหตุของปัญหาของคุณกับการจัดสรรหน่วยความจำ

ตัวอย่าง (ฉันเคยมี):

<argLine>XX:MaxPermSize=4096m ${argLine}</argLine>

ตอนนี้ฉันใช้ค่าที่ระบุอย่างหนัก:

<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>

ไม่ว่าจะด้วยเหตุผลใดก็ตามแอปพลิเคชันที่ทำงานร่วมกับ Surefire เช่น Jacoco ไม่ต้องขอหน่วยความจำเพียงพอที่จะอยู่ร่วมกับการทดสอบที่เกิดขึ้น ณ เวลาที่สร้าง


5

ฉันพบปัญหานี้เช่นกันในคอนเทนเนอร์ Docker ของเจนกินส์ (ลองเจนกินส์: lts, ​​เจนกินส์, เจนกินส์: เพรียวบางและเจนกินส์: เพรียวบางฉันไม่อยากผ่านที่เก็บทั้งหมดและอัพเดต pom สำหรับแต่ละโครงการดังนั้นฉันจึง เพิ่งเพิ่ม disableClassPathURLCheck ไปยังการเรียกบรรทัดคำสั่ง maven:

mvn test -DargLine="-Djdk.net.URLClassPath.disableClassPathURLCheck=true"

5

ใช้ Maven แหง 2.21.0 ฉันจะแก้ไขปัญหาการเปลี่ยนแปลงreuseForksค่าตัวเลือกจากความจริงจะเท็จ :

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <configuration>
                <reuseForks>false</reuseForks>
            </configuration>
        </plugin>
    </plugins>
</build>

ส่วนการกำหนดค่าทั้งหมดของฉันภายใต้งานสร้างดูเหมือนว่า:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
                <skip>false</skip>
                <reuseForks>false</reuseForks>
                <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
                <argLine>-Dfile.encoding=UTF-8</argLine>
                <useSystemClassLoader>false</useSystemClassLoader>
                <includes>
                    <!--Test* classes for the app testing -->
                    <include>**/directory/Test*.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

4

คุณต้องตรวจสอบว่าเครื่องของคุณเป็น 64 บิตหรือ 32 บิต หากเครื่องของคุณเป็น 32 บิตแล้วอาร์กิวเมนต์หน่วยความจำของคุณไม่ควรเกิน 4096 แม้ว่ามันควรจะต่ำกว่า 4 GB แต่ถ้าเครื่องของคุณเป็น 64 บิตให้ติดตั้ง Java 64 บิตและระบุ JAVA_HOME ใน mvn.bat ซึ่งชี้ไปที่การติดตั้ง Java 64 บิต


4

ฉันพบเคสเมื่อไม่มีคำตอบให้แก้ปัญหา มันมาพร้อมกับแอปพลิเคชันรุ่นเก่าที่ใช้ log4j และ SLF4J / logback

สถานการณ์ก่อนหน้า: clean testบิลด์ทำงานได้ดีเมื่อเรียกใช้จากภายใน Eclipse แต่เมื่อเปิดใช้ในบรรทัดคำสั่งข้อผิดพลาดนี้จะเกิดขึ้น CI สร้างบน CircleCI ก็ทำงานได้ดีเช่นกัน

สิ่งที่ฉันทำ: จากการคาดเดาที่บริสุทธิ์กำหนดค่าที่เหมาะสมlogback-test.xmlและลดความฟุ่มเฟื่อยของการบันทึก แท้จริงแล้วฉันไม่ได้พบข้อผิดพลาดนี้อีกและตอนนี้ฉันสามารถสร้างโครงการ (เช่นเดียวกับโมดูลที่เกิดข้อผิดพลาดนี้) จากบรรทัดคำสั่ง

ประเด็นของฉันคือวิธีการที่ใช้เฟรมเวิร์กการบันทึกหรือการกำหนดค่าอาจเป็นคำอธิบายอื่นวิธีการที่กรอบการเข้าสู่ระบบที่มีการใช้หรือการกำหนดค่าอาจจะเป็นอีกสาเหตุหนึ่ง

มันเป็นความขัดแย้งระหว่าง log4j และ logback จริงหรือไม่ หรือว่าปริมาณการบันทึกสูงที่เกิดจากการทดสอบล้นบัฟเฟอร์บรรทัดคำสั่งอย่างใด? ฉันไม่รู้ มันยังคงเป็นปริศนาสำหรับฉัน


การขึ้นลงเพราะสิ่งนี้สามารถแก้ / หลีกเลี่ยง / เลี่ยงปัญหาได้ ฉันใช้ slf4j และ sl4j-simple บน Windows และผลลัพธ์ที่ซบเซาก็ชี้ให้ฉันเห็นในทิศทางนี้เช่นกัน การตั้งค่า System.setProperty (SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "เตือน"); ทำเคล็ดลับ การลดระดับ maven-surefire-plugin เป็น 2.18.1 ก็ทำงานเช่นกัน
marcus

4

ฉันประสบปัญหาคล้ายกันหลังจากอัปเกรดเป็นจาวา 12 สำหรับฉันทางออกคือการอัปเดตเวอร์ชัน jacoco <jacoco.version>0.8.3</jacoco.version>


นี่เป็นปัญหาที่ฉันมีกับโครงการของฉัน น่าเสียดายที่คำตอบนี้ไม่สามารถมองเห็นได้ ...
OmriYaHoo

4

เวอร์ชัน 2.22.2 มีปัญหาจริงกับ JVM ที่มีการแยก ใช้เวอร์ชั่น 2.20 - มันใช้งานได้อย่างมีเสน่ห์!


<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>

อืมมันช่วยได้จริงๆ!
Zhen Zhang

ใช่มีปัญหากับv2.22.2 maven:3.6-jdk-8-alpineน่ารำคาญมาก!
KimchiMan

3

ฉันเพิ่งติดกับข้อผิดพลาดนี้ในขณะที่สร้างโปรแกรม jar ของฉัน containerized ด้วย Bamboo:

org.apache.maven.surefire.booter.SurefireBooterForkException: VM ที่ถูกแฮกค์ยกเลิกโดยไม่บอกลา

หลังจากทำการค้นคว้าหลายชั่วโมงฉันก็ซ่อมมัน และฉันคิดว่ามันจะมีประโยชน์ในการแบ่งปันโซลูชันของฉันที่นี่

ดังนั้นข้อผิดพลาดเกิดขึ้นทุกครั้งเมื่อmvn clean packageคำสั่งBamboo run สำหรับแอปพลิเคชันจาวาในคอนเทนเนอร์นักเทียบท่า ฉันไม่ใช่ผู้เชี่ยวชาญ Maven แต่ปัญหาอยู่ที่ปลั๊กอินของ Surefire และ Junit4 ที่รวมอยู่ในสปริงบูตเนื่องจากการพึ่งพา Maven

หากต้องการแก้ไขคุณต้องแทนที่ Junit4 สำหรับ Junit5 และแทนที่ปลั๊กอิน Surefire ในตัวคุณ pom.xmlปลั๊กอินในตัวคุณ

1. ภายในการยกเว้นการแทรกการพึ่งพาสปริงบูต:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <!-- FIX BAMBOO DEPLOY>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
    <!---->
</dependency>

2. เพิ่มการอ้างอิง Junit5 ใหม่:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>5.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-runner</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-surefire-provider</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
</dependency>

3. แทรกปลั๊กอินใหม่ภายในส่วนปลั๊กอิน

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.1.0</version>
        </dependency>
    </dependencies>
</plugin>

นั่นควรจะเพียงพอที่จะซ่อมแซมงานสร้างไม้ไผ่ อย่าลืมเปลี่ยนการทดสอบ Junit4 ทั้งหมดเพื่อรองรับ Junit5


2

การตั้งค่านี้ใน pom.xml ใช้งานได้สำหรับฉัน แต่คุณควรตรวจสอบเอกสารประกอบเพื่อหาวิธีแก้ไขอื่น ๆ https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html

       <plugin>

            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <!--these strange settings fixes a chrash and dumpstream from surefire when run from command line
                    Caused by: java.lang.ClassNotFoundException: org.apache.maven.surefire.booter.ForkedBooter
                -->
                <useSystemClassLoader>true</useSystemClassLoader>
                <useManifestOnlyJar>false</useManifestOnlyJar>
            </configuration>
        </plugin>

2

JVM ทางแยกที่ใช้ในการทดสอบหมดหน่วยความจำ วิธีแก้ปัญหาคือการปิดการใช้งานการฟอร์ก JVM และรันการทดสอบบน JVM หลักเพื่อให้แน่ใจว่าคุณมีหน่วยความจำเพียงพอหรือผ่าน args เพื่อเพิ่มหน่วยความจำของ JVM ที่มีทางแยก

ลองดูทางออกในคำตอบนี้


1

ฉันพบปัญหานี้ระหว่าง Jenkins สร้างบนเครื่อง Ubuntu

/var/log/syslogรายงานOut of memory: Kill process 19557 (java) score 207 or sacrifice childแล้ว

ดังนั้นผมจึงให้พื้นที่ swap Ubuntu เครื่องมากขึ้น ตั้งแต่นั้นมาปัญหาก็หายไป


1

การแก้ไขปัญหานี้ของฉันคือการปิดเบราว์เซอร์ chrome แช่งซึ่งกำลังสำลักหน่วยความจำคอมพิวเตอร์ของฉัน🙄



1

บน Windows (OpenJDK11, Maven 3.6.0, SUREFIRE 3.0.0-M1) ฉันได้รับสาเหตุที่:

# Created at 2018-11-14T14:28:15.629
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006c7500000, 522190848, 0) failed; error='The paging file is too small for this operation to complete' (DOS error/errno=1455)

และมีมติโดยการเพิ่มขนาดแฟ้มเพจจิ้งเช่นเช่นนี้


บน Linux (4.4.0-145-generic, amd64) เปลี่ยนจาก Oracle JRE 8 เป็น AdoptOpenJDK_8u202b08 สำหรับงาน Jenkins และเริ่มผลิตข้อผิดพลาด "fork": - "การทดสอบเริ่มต้นเป้าหมายของ org.apache.maven.plugins : maven-surefire-plugin: 2.19.1: การทดสอบล้มเหลว: VM ทางแยกถูกยกเลิกโดยไม่บอกลาอย่างถูกต้อง VM crash หรือ System.exit เรียกว่า " - เปลี่ยนกลับเป็น Oracle JRE และหยุดข้อผิดพลาด นี่เป็นงานเดียว (ของเราประมาณ 300) ที่มีปัญหานี้ โชคดีที่มันเป็นเพียงโครงการภายในไม่ใช่ลูกค้าที่สามารถส่งมอบได้เราสามารถเก็บไว้ใน Sun / Oracle JRE
Robert

1

ลองทั้งหมดข้างต้นไม่ทำงาน โซลูชันด้านล่างใช้งานได้สำหรับฉัน:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
    <argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>


ปลั๊กอินรุ่นที่แน่นอนนี้ทำให้ฉัน การกำหนดค่าของฉันคือ: Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T21:41:47+03:00) Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_201\jre Default locale: en_US, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
tworogue


1

ฉันลองวิธีแก้ปัญหาทั้งหมดที่มีให้ (ฟอร์ก, โหลดระบบ, หน่วยความจำมากขึ้น ฯลฯ .. ) ไม่มีอะไรทำงาน

สภาพแวดล้อม : การบิลด์ล้มเหลวในสภาพแวดล้อม gitlab ci การรันบิลด์ภายในคอนเทนเนอร์นักเทียบท่า

การแก้ไข : เราใช้ surefireplugin ในรุ่น 2.20.1 และอัปเกรดเป็น 2.21.0 หรือสูงกว่า (เราใช้ 2.22.1) เพื่อแก้ไขปัญหา

สาเหตุ : SUREFIRE-1422 - Surefire ใช้คำสั่งpsซึ่งไม่ได้มีอยู่ในสภาพแวดล้อมของนักเทียบท่าและนำไปสู่ ​​"ความล้มเหลว" ปัญหานี้ได้รับการแก้ไขใน 2.21.0 หรือสูงกว่า

ขอบคุณคำตอบนี้จากคำถามอื่น: https://stackoverflow.com/a/50568662/2970422


1

ฉันวิ่งเข้าไปในปัญหานี้เช่นกันใน MacOS ในขณะที่การดีบักรหัสการทดสอบ Selenium ระยะไกลบนพอร์ต 5005 ปัญหากลายเป็นว่ามีสาเหตุมาจาก surefire-forked-JVM ที่เหลือที่ยังคงทำงานอยู่ เอาต์พุตบันทึกไปยังเทอร์มินัล Eclipse IDE ไม่แสดงปัญหาพื้นฐานซึ่งเป็นที่อยู่ที่ใช้งานแล้ว ข้อความบันทึกแสดงขึ้นเมื่อฉันรันคำสั่งเดียวกันในเทอร์มินัล MacOS ที่ Eclipse พยายามเรียกใช้จริง:

/bin/sh -c cd /path/to/your/project/directory && /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/bin/java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -jar /path/to/target/surefire/surefirebooter230340673926465933.jar /path/to/target/surefire 2019-06-28T10-50-02_140-jvmRun1 surefire6455775580414993159tmp surefire_02461993428448591420tmp

การฆ่าอินสแตนซ์ rogue JVM (มองหาชื่อกระบวนการ java ในการตรวจสอบกิจกรรม) แก้ไขปัญหา ตามวิธีที่ฉันใช้งานปลั๊กอิน surefire เวอร์ชัน 2.21.0 โดยไม่มีปัญหากับ open jdk 8 (v1.8.0_212) โปรดทราบว่าเส้นทางทั้งหมดจะเฉพาะกับสภาพแวดล้อมการสร้างของคุณและอาจพอร์ต (ที่อยู่ = 5005)


1

ฉันกำลังเผชิญปัญหาเดียวกันเมื่อเรียกใช้การทดสอบหน่วยโดยใช้การทดสอบ Maven พยายามเปลี่ยนเวอร์ชั่นของ Surefire แต่ไม่สามารถทำงานได้ ในที่สุดก็จัดการเพื่อแก้ปัญหาดังต่อไปนี้: EARLIER: (เมื่อปัญหาเกิดขึ้น): javac มาจาก jdk 1.8 java ชี้ไปที่ถังขยะ java จาก jdk 1.11 ปัจจุบัน: (เมื่อปัญหาได้รับการแก้ไข): ทั้ง javac & java กำลังชี้ไปที่ ถังขยะจาก jdk 1.8

ขอแสดงความนับถือ Teja


0

ฉันพบข้อผิดพลาดนี้หลังจากตัวแปรสมาชิกแบบคงที่ในคลาสทดสอบของฉันเรียกว่าวิธีการสร้างวัตถุ (ซึ่งใช้ในกรณีทดสอบตลอดทั้งชั้นเรียน) และวิธีการทำให้เกิดข้อยกเว้น

// Object created inside test class by calling a static getter.
// Exception thrown in getter:
private static Object someObject = SomeObject.getObject(...);

// ... <Object later used in class>

การแก้ไขบางอย่างรวมถึงการสร้างวัตถุใหม่ในแต่ละกรณีทดสอบและตรวจจับข้อยกเว้นตาม หรือโดยการเริ่มต้นวัตถุภายในวิธีการ @BeforeTest และสร้างความมั่นใจว่ามันถูกสร้างขึ้นอย่างถูกต้อง


0

ในกรณีของฉันปัญหาเกี่ยวข้องกับเส้นทางพื้นที่ทำงานซึ่งยาวมาก ดังนั้นฉันจึงทำการปรับเส้นทางใหม่และวิธีนี้ก็แก้ไขปัญหาให้ฉันได้


นั่นคือบนเครื่องที่ใช้ windows หรือไม่?
hithwen

ใช่มันกำลังทำงานอยู่ใน Windows
thiago-devel

คุณพบได้อย่างไร
dzieciou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.