Sampai hari ini, kompilasi maven saya gagal.
[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO] at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO] at java.lang.String.<init>(String.java:203)
[INFO] at java.lang.String.substring(String.java:1877)
[ERROR] Kehabisan memori; untuk menambah jumlah memori, gunakan -Xmx flag saat startup (java -Xmx128M ...)
Sampai kemarin saya telah berhasil menjalankan kompilasi maven.
Pada hari ini, saya baru saja menaikkan heap saya menjadi 3 GB . Juga, saya hanya mengubah 2-3 baris kode kecil, jadi saya tidak mengerti kesalahan 'kehabisan memori' ini.
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
EDIT: Saya mencoba komentar poster dengan mengubah pom.xml modul saya yang gagal. Tapi saya mendapat kesalahan build maven yang sama.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<fork>true</fork>
<meminitial>1024m</meminitial>
<maxmem>2024m</maxmem>
</configuration>
</plugin>
maven
out-of-memory
maven-3
pom.xml
maven-compiler-plugin
Kevin Meredith
sumber
sumber
-Xmx
.Jawaban:
Modul 'web' seperti apa yang Anda bicarakan? Apakah ini perang sederhana dan perang tipe kemasan?
Jika Anda tidak menggunakan perangkat web Google (GWT), Anda tidak perlu menyediakannya
gwt.extraJvmArgs
Proses kompilasi mungkin bukan ide terbaik, karena proses ini memulai proses kedua yang mengabaikan
MAVEN_OPTS
sama sekali, sehingga membuat analisis menjadi lebih sulit.Jadi saya akan mencoba untuk meningkatkan Xmx dengan mengatur MAVEN_OPTS
Dan jangan membagi kompiler ke proses yang berbeda
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin>
Meningkatkan
-XX:MaxPermSize=512m
tidak diperlukan karena jika ukuran perm adalah alasan masalahnya, maka saya mengharapkan kesalahanjava.lang.OutOfMemoryError: PermGen space
Jika itu tidak menyelesaikan masalah Anda, maka Anda dapat membuat heap dump untuk analisis lebih lanjut dengan menambahkan
-XX:+HeapDumpOnOutOfMemoryError
. Selain itu, Anda dapat menggunakan jconsole.exe di direktori java bin Anda untuk menyambung ke jvm saat kompilasi berjalan dan melihat apa yang terjadi di dalam heap jvm.Ide lain (mungkin yang bodoh) yang muncul di benak saya, apakah Anda memiliki cukup RAM di dalam mesin Anda? Mendefinisikan ukuran memori itu bagus, tetapi jika host Anda hanya memiliki 4GB dan Anda mungkin memiliki masalah bahwa Java tidak dapat menggunakan Memori yang ditentukan karena sudah digunakan oleh OS, Java, MS-Office ...
sumber
Menjawab terlambat untuk menyebutkan opsi lain daripada
MAVEN_OPTS
variabel lingkungan umum untuk diteruskan ke Maven membangun opsi JVM yang diperlukan.Sejak Maven 3.3.1 , Anda dapat memiliki
.mvn
folder sebagai bagian dari proyek terkait danjvm.config
file sebagai tempat yang tepat untuk opsi semacam itu.Sebagai bagian dari catatan rilis resmi
Keuntungan utama dari pendekatan ini adalah bahwa konfigurasi diisolasi ke proyek yang bersangkutan dan diterapkan ke seluruh build juga, dan kurang rapuh dibandingkan
MAVEN_OPTS
developer lain yang mengerjakan proyek yang sama (lupa menyetelnya).Selain itu, opsi akan diterapkan ke semua modul dalam kasus proyek multi-modul.
sumber
Saya mendapat masalah yang sama saat mencoba mengkompilasi "instalasi bersih" menggunakan VPS ram 512Mb Lowend dan CPU yang bagus. Jalankan OutOfMemory dan matikan skrip berulang kali.
Saya menggunakan
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"
dan bekerja.Masih mendapatkan beberapa kegagalan kompilasi karena baru pertama kali saya membutuhkan Maven, tetapi masalah OutOfMemory telah hilang.
sumber
Tambahkan opsi
ke MAVEN_OPTS
maven-compiler-plugin
pilihan<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <fork>true</fork> <meminitial>1024m</meminitial> <maxmem>2024m</maxmem> </configuration> </plugin>
sumber
maven-compilier-plugin
dan tingkatkan-XX:MaxPermSize
,Xmx
seharusnya =XX:MaxPermSize
maven-compilier-plugin
Saya mendapat masalah yang sama saat mengkompilasi Druid.io, meningkatkan MaxDirectMemorySize akhirnya berhasil.
sumber
Konfigurasi di bawah ini berfungsi dalam kasus saya
<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>
Coba gunakan -XX: MaxPermSize daripada -XX: MaxPermGen
sumber
sumber
Jenis OS apa yang Anda jalankan?
Untuk menetapkan lebih dari 2GB ram itu harus setidaknya OS 64bit.
Lalu ada masalah lain. Sekalipun OS Anda memiliki RAM Tidak Terbatas, tetapi itu terfragmentasi sedemikian rupa sehingga tidak ada satu pun blok gratis 2GB yang tersedia, Anda juga akan keluar dari pengecualian memori. Dan perlu diingat bahwa memori Heap normal hanyalah sebagian dari memori yang digunakan proses VM. Jadi pada mesin 32bit Anda mungkin tidak akan pernah bisa mengatur Xmx ke 2048MB.
Saya juga menyarankan untuk mengatur min memori maks ke nilai yang sama, karena dalam hal ini segera setelah VM kehabisan memori, waktu pertama 1GB dialokasikan dari awal, VM kemudian mengalokasikan blok baru (dengan asumsi itu meningkat dengan 500MB blok) 1,5GB setelah itu dialokasikan, itu akan menyalin semua barang dari blok satu ke yang baru dan membebaskan Memori setelah itu. Jika kehabisan Memori lagi, 2GB dialokasikan dan 1,5 GB kemudian disalin, untuk sementara mengalokasikan memori 3,5GB.
sumber
Saat membangun proyek pada platform Unix / Linux, atur sintaks opsi Maven seperti di bawah ini. Perhatikan bahwa tanda qoutation tunggal, bukan qoutation ganda.
sumber
Menggunakan .mvn / jvm.config bekerja untuk saya plus memiliki manfaat tambahan karena ditautkan dengan proyek.
sumber
Ini terjadi dalam proyek besar di Windows ketika cygwin atau emulator linux lainnya digunakan (git bash). Secara kebetulan, keduanya tidak berfungsi pada proyek saya, apa itu proyek open source yang besar. Dalam skrip sh, beberapa perintah mvn dipanggil. Ukuran memori tumbuh ke ukuran tumpukan lebih besar yang ditentukan dalam Xmx dan sebagian besar waktu dalam kasus proses jendela kedua dimulai. Ini membuat konsumsi memori menjadi lebih tinggi.
Solusi dalam kasus ini adalah dengan menggunakan file batch dan ukuran Xmx yang diperkecil, kemudian operasi maven berhasil. Jika ada minat saya dapat mengungkapkan lebih detail.
sumber
Seseorang telah menyebutkan masalah dengan OS 32 bit. Dalam kasus saya, masalahnya adalah saya mengompilasi dengan 32 bit JDK.
sumber
Meningkatkan ukuran memori dalam variabel lingkungan 'MAVEN_OPTS' akan membantu menyelesaikan masalah ini. Bagi saya, meningkatkan dari -Xmx756M menjadi -Xmx1024M berhasil.
sumber