การหมดอายุ Daemon เนื่องจากพื้นที่ฮีป JVM หมดลง


94

ฉันเพิ่งอัปเดต Android Studio เป็น 3.5 Beta 1 และได้รับ

การหมดอายุ Daemon เนื่องจากพื้นที่ฮีป JVM หมดลง

ข้อความในขณะที่บิลด์กำลังทำงาน นอกจากนี้การสร้างยังใช้เวลาอีกนานกว่าจะเสร็จสมบูรณ์ ใครมีความคิดเกี่ยวกับเรื่องนี้บ้าง?


2
ดูว่าช่วยได้ที่นี่: stackoverflow.com/questions/47207126/…
Juraj Martinka

1
@JurajMartinka ใช่คุณพูดถูก มันก็คงหลังจากที่เพิ่มขึ้นIDE ขนาดกองสูงสุด ดังนั้นพวกเขาจึงแนะนำตัวเลือกใหม่ที่เรียกว่าการตั้งค่าหน่วยความจำใน Android Studio 3.5 ล่าสุด ทั้งหมดนี้ทำเพื่อแก้ไขปัญหาหน่วยความจำรั่วใน Android Studio
Rishabh Sagar

คำตอบ:


106

ฉันสามารถแก้ปัญหานี้สำหรับโครงการReact Nativeของฉันได้โดยกำหนดค่าสิ่งต่อไปนี้:

// gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

และ

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}

1
@MattBooth ขอบคุณสำหรับความช่วยเหลือฉัน
Dishant Chanchad

2
เมื่อฉันเพิ่มรหัสนี้ react-native-vector-icons ทำงานไม่ถูกต้อง
Amir Gorji

ขอบคุณมาก. การเพิ่มคะแนนไม่สามารถแสดงความขอบคุณได้
pokumars

89

ซึ่งสามารถแก้ไขได้โดยการเพิ่มขนาดฮีพสูงสุดที่กำหนดค่าไว้สำหรับโปรเจ็กต์

ผ่าน IDE:

เพิ่มบรรทัดด้านล่างลงในไฟล์ gradle.properties ขนาดหน่วยความจำต่ำกว่าสามารถกำหนดค่าได้ตามความพร้อมใช้งานของ RAM

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m

ผ่าน GUI:

ในการตั้งค่าค้นหา'การตั้งค่าหน่วยความจำ'และเพิ่มขนาดฮีปสูงสุดของ IDEและขนาดฮีพสูงสุดของ Daemonตามความพร้อมใช้งานของ RAM ของระบบ

การตั้งค่าหน่วยความจำใน Android Studio


FWIW org.gradle.daemon มีค่าเริ่มต้นเป็นจริงดังนั้นจึงไม่จำเป็นต้องใช้บรรทัดนั้น
Smalls

25

วิธีแก้ปัญหาคือการเพิ่มหน่วยความจำบิลด์ Android

เมื่อคุณเพิ่มโมดูลลงในแอปของคุณมีความต้องการที่เหลือเชื่ออยู่ในระบบการสร้าง Android และการตั้งค่าหน่วยความจำเริ่มต้นจะไม่ทำงาน เพื่อหลีกเลี่ยงOutOfMemoryErrorsในระหว่างการสร้าง Android คุณควรยกเลิกการใส่ข้อคิดเห็นการตั้งค่าหน่วยความจำ gradle ทางเลือกที่มีอยู่ใน/android/gradle.properties :

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

คุณสามารถค้นหา gradle.properties ในโฟลเดอร์android

ปล

เรากำลังทำอะไรและทำไมจึงช่วยได้

ให้ฉันล้างคำศัพท์พื้นฐานเพื่อทำความเข้าใจเรื่องทั้งหมด

Daemon : - daemon คือโปรแกรมคอมพิวเตอร์ที่ทำงานเป็นกระบวนการเบื้องหลังแทนที่จะอยู่ภายใต้การควบคุมโดยตรงของผู้ใช้แบบโต้ตอบ

Android Studio 2.1เปิดใช้งานคุณลักษณะใหม่: Dex In Processซึ่งสามารถเพิ่มความเร็วในการสร้างแบบ Clean ทั้งหมดได้อย่างมากรวมทั้งปรับปรุงประสิทธิภาพการทำงานทันที

ในการใช้ประโยชน์จากDex In Processคุณจะต้องแก้ไขไฟล์ gradle.properties ของคุณและเพิ่มจำนวนหน่วยความจำที่จัดสรรให้กับGradle Daemon VMโดย 1 Gb เป็นอย่างน้อย 2 Gb โดยใช้คุณสมบัติ org.gradle.jvmargs :

ระบุอาร์กิวเมนต์ JVM ที่ใช้สำหรับกระบวนการ daemon การตั้งค่านี้มีประโยชน์อย่างยิ่งสำหรับการปรับแต่งการตั้งค่าหน่วยความจำ

org.gradle.jvmargs=-Xmx2048m

ค่าเริ่มต้น:

-Xmx10248m -XX:MaxPermSize=256m

การจัดสรรหน่วยความจำGradle Daemon VMเริ่มต้นคือ 1 กิกะไบต์ซึ่งไม่เพียงพอที่จะรองรับ dexInProcess ดังนั้นในการใช้ประโยชน์คุณจะต้องตั้งค่าเป็นอย่างน้อย 2 กิกะไบต์

Dex ในกระบวนการทำงานโดยอนุญาตให้กระบวนการ DEX หลายกระบวนการทำงานภายใน VM เดียวที่แชร์กับ Gradle ด้วยซึ่งเป็นเหตุผลว่าทำไมคุณต้องจัดสรรหน่วยความจำเพิ่มเติมก่อนจึงจะสามารถเปิดใช้งานได้ - หน่วยความจำนั้นจะถูกแชร์ระหว่าง Gradle และหลายกระบวนการ DEX

หากคุณได้เพิ่ม javaMaxHeapSize ในไฟล์ build.gradle ระดับโมดูลเกินค่าเริ่มต้นที่ 1 กิกะไบต์คุณจะต้องเพิ่มหน่วยความจำที่กำหนดให้กับ Gradle Daemon ให้สอดคล้องกัน

เมื่อมีหน่วยความจำเพียงพอที่กำหนด Dex ในกระบวนการถูกเปิดใช้งานโดยค่าเริ่มต้นการปรับปรุงประสิทธิภาพการสร้างโดยรวมและการลบค่าใช้จ่ายในการเริ่มต้นอินสแตนซ์ VM แบบขนานหลายตัวค่าใช้จ่ายของการเริ่มต้นหลายขนานกรณีผลลัพธ์ที่ได้คือการปรับปรุงอย่างมีนัยสำคัญในเวลาการสร้างทั้งหมดรวมถึงการรันทันทีการเพิ่มหน่วยและการสร้างแบบเต็ม

ที่มา: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

https://rnfirebase.io/#increasing-android-build-memory


1
คุณช่วยอธิบายได้ไหมว่าสิ่งนี้กำลังทำอะไรและทำไมจึงช่วยได้
Alex

1
ใส่แหล่งที่มาด้วย medium.com/google-developers/…
Rishabh Sagar

1
สวัสดี @KailashUniyal จะเกิดอะไรขึ้นถ้าฉันมีขนาดฮีปที่ 2048 ใน gui ของ android studio และฉันยังคงได้รับ 'Expiring Daemon เนื่องจากพื้นที่ฮีป JVM หมด'
abdi

1
@abdi ลองใส่org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8ใน gradle.properties หากยังใช้งานไม่ได้ขออภัยฉันไม่รู้ว่าจะแก้ไขอย่างไร
Kailash Uniyal

1
การไม่แสดงความคิดเห็นorg.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8ในการandroid/gradle.propertiesทำงานเปรียบเสมือนเสน่ห์ ขอบคุณ !! @KailashUniyal
vikas bansal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.