Java、Gradle、CI 和指定内存使用限制

标签 java android command-line gradle continuous-integration

我在 CI 环境中运行 Robolectric 测试用例,它为所有容器设置了 4gigs 的上限。由于我的测试用例增加了,内存使用量也明显增加了。

我无法再运行成功的测试/构建,因为一个进程继续占用我的内存限制。

我尝试使用以下 gradle.properties 配置 Gradle

org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m

但是,第一个进程仍然使用 4gigs。这是用法转储。

  PID  RSS     %CPU COMMAND
  5663 4360612 60.0 /usr/lib/jvm/jdk1.7.0/bin/java -javaagent:/home/ubuntu/.gradle/caches/modules-2/files-2.1/com.newrelic.agent.android/class-rewriter/3.407.0/6f7f95a36369f76b739461331202406fa1f519c7/class-rewriter-3.407.0.jar -Dandroid.assets=/home/ubuntu/Android/app/build/intermediates/assets/debug -Dandroid.manifest=/home/ubuntu/Android/app/build/intermediates/manifests/debug/AndroidManifest.xml -Dandroid.resources=/home/ubuntu/Android/app/build/intermediates/res/debug -Djava.security.manager=jarjar.org.gradle.process.internal.child.BootstrapSecurityManager -Dfile.encoding=UTF-8 -ea -cp /home/ubuntu/.gradle/caches/1.10/workerMain/gradle-worker.jar jarjar.org.gradle.process.internal.launcher.GradleWorkerMain
  5277 395868  67.3 /usr/lib/jvm/jdk1.7.0/bin/java -XX:MaxPermSize=512m -Xmx512m -Dfile.encoding=UTF-8 -cp /usr/local/gradle-1.10/lib/gradle-launcher-1.10.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 1.10 /home/ubuntu/.gradle/daemon 120000 99e43642-9137-411a-ba62-f82d964a2f89 -XX:MaxPermSize=512m -Xmx512m -Dfile.encoding=UTF-8
  5237 305076  4.3  /usr/lib/jvm/jdk1.7.0/bin/java -Dorg.gradle.appname=gradle -classpath /usr/local/gradle-1.10/lib/gradle-launcher-1.10.jar org.gradle.launcher.GradleMain --info --project-dir /home/ubuntu/Android/app test

有什么方法可以配置第一个进程不使用那么多内存吗?此外,如果此环境中没有可用的交换空间,限制内存使用是否会导致 OOM 错误?

最佳答案

测试 JVM 的内存限制可以通过以下方式配置:

tasks.withType(Test) {
    maxHeapSize = "512m"
    jvmArgs "-XX:MaxPermSize=512m"
}

不过,这是否能解决问题还有待观察。

关于Java、Gradle、CI 和指定内存使用限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25207049/

相关文章:

linux - 在 bash 脚本中编码字符串的 URL

c - 在尝试运行 C pthread 程序的命令行中出现权限被拒绝错误

java - 在 C 中嵌入 Java 库

java - 如何阻止构造函数在派生类中尝试使用私有(private)但不起作用的java继承中覆盖

java - 是否可以将图像传输到 3 个不同的 Activity ?

android - 如何使用 eclipse 删除应用程序未使用的所有资源(图像、mp3、xml)?

android - 如何在 Jetpack Compose 中填充矢量图像的背景?

ssl - 为 IIS7 使用 BAT 文件注册 SSL 绑定(bind)

java - 如何找出java类的继承树的深度?

java - 多次调用 onFocusChange 导致 "hasFocus"变量不可用