Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android studio 2.0 Preview 8 with gradle plugin 2.0.0-alhpa8, memory warning despite heap size to 4Gb

I just updated to Android Studio version 2.0 Preview 8 and gradle plugin 2.0.0-alpha8. I noticed that now there's a warning in case the heap space is not big enough for dexing.

As they say in the proper page (http://tools.android.com/recent)

In 2.0.0-alpha8 we've added some automatic diagnostics for this: if the build process is too small, we switch back to out-of-memory dexing and emit a build warning explaining how to bump up the Gradle daemon size. (We're also working on some additional related improvements for the next build after alpha8.)

When I went building my project I got the following error:

To run dex in process, the Gradle daemon needs a larger heap. It currently has 3641 MB. For faster builds, increase the maximum heap size for the Gradle daemon to more than 4g as specified in dexOptions.javaMaxHeapSize. To do this, set org.gradle.jvmargs=-Xmx4g as specified in dexOptions.javaMaxHeapSize in the project gradle.properties. For more information see https://docs.gradle.org/current/userguide/build_environment.html

actually, I get a lot of these in a row. Which surprises me because that's what I see in my gradle.properties file (in my project home dir)

ANDROID_BUILD_TARGET_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=23
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

also, in the build.gradle of my main module, I put

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
}

so I don't understand where the builder/dexer/compiler is getting that 3641MB value.

Builds are extremely slow

I Disabled instant run and now things are faster. 48-50 seconds for a build. I still get the same error but just once and not many times in a row.

I'm on Linux, my ulimit -a is the following:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31483
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31483
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Also, this is my studio.vmoptions file: https://gist.github.com/MarKco/1ae7918daf867a378a2f I guess it's unedited. I could have a custom one, but I don't know where it could be.

like image 566
Marco Zanetti Avatar asked Jan 28 '16 14:01

Marco Zanetti


1 Answers

I got it solved, or so it seems. The last change I had made before I posted the question was the following:

I had

ANDROID_BUILD_TARGET_SDK_VERSION=22
ANDROID_BUILD_TOOLS_VERSION=22
ANDROID_BUILD_SDK_VERSION=22
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

and I changed it to

ANDROID_BUILD_TARGET_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=23
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

I don't know why it wasn't changed automatically, since I've been using 23 as target version from a long time. Anyways, after I changed from 22 to 23 I didn't have good builds yet, but that seemed to be due to a gradle sync still running in background. I killed all the gradle projects, kept the version 23 in place of 22, disabled the instant run and performed a new synchronization. At first I kept seing the "To run dex in process, the Gradle daemon needs a larger heap." error, just one time and not repeated as it happened before. But build after build I saw build times getting lower, until I got a 10 seconds build. I guess it's solved. I hope, at least.

P.S. In the end I changed the MaxPermSize accordingly to what Henry said, now my configuration is

ANDROID_BUILD_TARGET_SDK_VERSION=23
ANDROID_BUILD_TOOLS_VERSION=23
ANDROID_BUILD_SDK_VERSION=23
ANDROID_BUILD_MIN_SDK_VERSION=16
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
like image 156
Marco Zanetti Avatar answered Nov 13 '22 16:11

Marco Zanetti