Daemon hết hạn vì không gian heap JVM đã hết


91

Tôi vừa cập nhật Android Studio lên 3.5 Beta 1 và tôi đang nhận được

Daemon hết hạn vì không gian heap JVM đã hết

trong khi bản dựng đang chạy. Ngoài ra, quá trình xây dựng cần nhiều thời gian hơn để hoàn thành. Có ai có bất kỳ ý tưởng về điều này?


2
Xem tại đây nếu điều đó có ích: stackoverflow.com/questions/47207126/…
Juraj Martinka,

1
@JurajMartinka vâng, bạn nói đúng. nó đã được sửa sau khi tăng kích thước đống tối đa IDE . Vì vậy, họ giới thiệu một tùy chọn mới có tên Cài đặt bộ nhớ trong Android Studio 3.5 mới nhất. Tất cả điều này được thực hiện để sửa lỗi rò rỉ bộ nhớ trong Android Studio.
Rishabh Sagar

Câu trả lời:


97

Tôi đã có thể giải quyết vấn đề này cho dự án React Native của mình bằng cách định cấu hình như sau:

// 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 thanx để được giúp đỡ tôi
Dishant Chanchad

2
khi tôi thêm mã này, react-native-vector-icon không hoạt động bình thường.
Amir Gorji

86

Điều này có thể được khắc phục bằng cách tăng kích thước heap tối đa đã định cấu hình cho dự án.

Thông qua IDE:

Thêm các dòng dưới đây vào tệp gradle.properties. Kích thước bộ nhớ dưới đây có thể được cấu hình dựa trên tính khả dụng của RAM

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

Thông qua GUI:

Trong Cài đặt, tìm kiếm 'Cài đặt Bộ nhớ' và tăng kích thước heap tối đa IDEkích thước heap tối đa Daemon tùy theo tính khả dụng của RAM hệ thống.

Cài đặt bộ nhớ trong Android Studio


FWIW org.gradle.daemon mặc định là true nên dòng đó không cần thiết.
Smalls

22

Giải pháp là tăng bộ nhớ xây dựng Android.

Khi bạn thêm nhiều mô-đun hơn vào ứng dụng của mình, có một nhu cầu đáng kinh ngạc đặt lên hệ thống xây dựng Android và cài đặt bộ nhớ mặc định sẽ không hoạt động. Để tránh OutOfMemoryErrors trong các bản dựng Android, bạn nên bỏ ghi chú cài đặt bộ nhớ gradle thay thế có trong /android/gradle.properties :

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

Bạn có thể tìm thấy gradle.properties bên trong thư mục android .

PS

Chúng tôi đang làm gì và tại sao nó lại giúp ích?

Hãy để tôi giải thích một số thuật ngữ cơ bản để hiểu toàn bộ vấn đề.

Daemon : - Daemon là một chương trình máy tính chạy như một tiến trình nền, thay vì chịu sự kiểm soát trực tiếp của một người dùng tương tác.

Android Studio 2.1 kích hoạt một tính năng mới: Dex In Process , có thể tăng đáng kể tốc độ của các bản dựng hoàn toàn sạch cũng như cải thiện hiệu suất Instant Run.

Để tận dụng lợi thế của Dex In Process , bạn sẽ cần sửa đổi tệp gradle.properties của mình và tăng dung lượng bộ nhớ được cấp cho máy ảo Gradle Daemon lên 1 Gb, lên tối thiểu 2 Gb, sử dụng thuộc tính org.gradle.jvmargs :

Chỉ định các đối số JVM được sử dụng cho quy trình daemon. Cài đặt này đặc biệt hữu ích để điều chỉnh cài đặt bộ nhớ.

org.gradle.jvmargs=-Xmx2048m

Giá trị mặc định:

-Xmx10248m -XX:MaxPermSize=256m

Phân bổ bộ nhớ Gradle Daemon VM mặc định là 1 gigabyte - không đủ để hỗ trợ dexInProcess, vì vậy để tận dụng lợi thế, bạn cần đặt nó thành ít nhất 2 gigabyte.

Dex in process hoạt động bằng cách cho phép nhiều quy trình DEX chạy trong một máy ảo duy nhất cũng được chia sẻ với Gradle, đó là lý do tại sao bạn cần phân bổ bộ nhớ bổ sung trước khi nó có thể được kích hoạt - bộ nhớ đó sẽ được chia sẻ giữa Gradle và nhiều quy trình DEX.

Nếu bạn đã tăng javaMaxHeapSize trong tệp build.gradle cấp mô-đun của mình vượt quá mặc định là 1 gigabyte, bạn sẽ cần tăng bộ nhớ được gán cho Gradle Daemon tương ứng.

Khi có đủ bộ nhớ được chỉ định, Dex in Process được bật theo mặc định, cải thiện hiệu suất xây dựng tổng thể và loại bỏ chi phí khởi động nhiều phiên bản VM song song . Kết quả là một sự cải thiện đáng kể trong tất cả các lần xây dựng, bao gồm Chạy tức thì, các phiên bản tăng dần và đầy đủ.

Nguồn: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

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


1
Bạn có thể giải thích điều này đang làm gì và tại sao nó lại hữu ích?
Alex

1
Đặt cả các nguồn. medium.com/google-developers/…
Rishabh Sagar

1
Xin chào @KailashUniyal, điều gì sẽ xảy ra nếu tôi có kích thước đống là 2048 trong gui của android studio và tôi vẫn nhận được 'Daemon sắp hết hạn vì không gian đống JVM' thì sao?
abdi

@abdi Hãy thử đưa cái này org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8vào gradle.properties. Nếu vẫn không hoạt động thì xin lỗi tôi không biết làm thế nào để khắc phục điều đó.
Kailash Uniyal

1
bỏ bình luận org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8trong android/gradle.propertieslika làm việc một sự quyến rũ. Cảm ơn!! @KailashUniyal
vikas bansal
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.