java - 在 hosteurope 服务器上的 Jenkins 中运行 android gradle 脚本时出现堆内存问题

标签 java android jenkins heap-memory android-gradle-plugin

对于使用 gradle 构建系统的 android 项目,我想在 hosteurope 提供的虚拟服务器上的 jenkins 中运行测试和构建。

系统使用

  • Debian Wheezy (7.5)
  • OpenJDK-7 (7u55-2.4.7-1~deb7u1)
  • Jenkins(1.564) 作为独立服务器。

用于运行我安装的 jenkins 作业

  • Gradle 插件(1.23)
  • Android 模拟器插件(2.11.1)

对于构建过程本身,使用了 Android 构建工具 (19.1)。

每次在 preDexDebug 任务期间构建都会失败,并显示以下错误消息:

:app:preDexDebugError: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/var/lib/jenkins/tools/android-sdk/build-tools/19.1.0/dx --dex --output    /var/lib/jenkins/workspace/test_project/app/build/pre-dexed/debug/ormlite-core-4.48-bdb20e19ede8fedfab10bb99de3affa6b8ed6e4d.jar /var/lib/jenkins/.gradle/caches/modules-2/files-2.1/com.j256.ormlite/ormlite-core/4.48/e579bd2905d0399af5029aaaf9817d5fa0ca88a5/ormlite-core-4.48.jar
  Error Code:
    1
  Output:
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.

应用“--debug”开关后,堆内存不足会显示为失败的原因。

不幸的是,将/etc/default/jenkins 中的 JAVA_ARGS 参数或 gradlew 脚本中的 DEFAULT_JVM_OPTS 设置为“-Xms128m -Xmx512”并不能解决问题。 我发现唯一可行的解​​决方案是使用 _JAVA_OPTIONS。

因此,我在 jenkins 配置中添加了 _JAVA_OPTIONS 作为环境变量。

转到菜单中的“Jenkins->Manage Jenkins->Configure System”并激活“Global properties”部分中的复选框“Environment variables”。 然后点击“添加”按钮并在标记为“名称”的文本字段中插入 _JAVA_OPTIONS,并在标记为“值”的文本字段中插入“-Xms64M -Xmx512M”。

根据 hosteurope 网站 ( http://faq.hosteurope.de/index.php?cpid=13918 ) 上的德国常见问题解答条目,问题是由 hosteurope VPS 中可用内存的错误计算引起的。

最佳答案

已解释问题的解决方法是在问题中使用 _JAVA_OPTIONS 作为 jenkins 中的环境变量。它会影响所有由 jenkins 启动的 Java 进程,这可能会导致其他问题。希望下一个 Java 或 Hosteurope VPS 更新可以完全解决这个问题。

关于java - 在 hosteurope 服务器上的 Jenkins 中运行 android gradle 脚本时出现堆内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866385/

相关文章:

java - 如何在 Java 中健全地检查日期

java - 列出 ConcurrentModificationException

java - 如何在 Java 中以 root 权限运行 shell 命令

android - 自动建议短语/句子完成

Jenkins 分支说明符不被遵守

java - 使用curl将文件上传到Box API

android - 如何在 java 代码中管理 UI?

android更改选项菜单文本颜色

jenkins - 在 Jenkins 中对数组进行简单的并行执行

jenkins - 无法在 Jenkins 中的 Groovy 中运行 shell 命令