R8导致Gradle Daemon在Github Hosted Action Runner上消失

u4vypkhs  于 2023-10-19  发布在  Git
关注(0)|答案(1)|浏览(110)

我在尝试编译我的应用程序的发布版本时遇到了Githubs action runners的问题。我的应用有8种不同的风格,我们在Play商店上构建和提供,几个月前,我能够使用Github Actions在一个runner上同时构建其中的3种风格。如果我们尝试一次做3种以上的口味,大约15分钟后,构建将失败,
FAILURE: Build failed with an exception.
* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
Gradle日志并没有真正的帮助,除了指向当时正在运行的任务(minify r8)
当我继承这个代码库时,我看到我们在jvm args中将最大堆大小设置为6 gig,如果我降低它,当r8运行时,我会出现内存不足的错误。对我来说,R8占用那么多内存似乎有点疯狂,最重要的是,Github托管的跑步者只有7 GB的RAM可供使用。因此,如果我们将r8在gradle守护进程中使用的合并与Kotlin守护进程也在运行相结合,我认为runner正在杀死gradle守护进程,因为它占用了内存,或者它正在因内存不足而死亡。
自从我们添加了Jetpack Compose Libraries之后,我们现在一次不能构建多个应用程序的风格,我担心由于r8造成的内存占用而失去在github runners上构建的能力。
这是我当前的gradle.properties的样子:
org.gradle.jvmargs=-Xms1024m -Xmx6144m -XX:-UseGCOverheadLimit -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=512m -XX:+UseParallelGC org.gradle.parallel=true org.gradle.configureondemand=true org.gradle.daemon=true org.gradle.caching=true android.useAndroidX=true android.debug.obsoleteApi=true kapt.incremental.apt=true
我尝试了一些方法来降低R8的工作量:
1.删除了所有未使用的资源,已设法杂波了我们的资源文件夹
1.我们实际上并没有使用数据绑定,但同时打开了KotlinAndroid扩展和数据绑定,所以我关闭了它
1.当我们实际上不再需要它时,我们打开了Jetifier,所以我禁用了它
1.我改为使用并行垃圾收集器
1.我试图不实际使用gradle守护进程,并没有看到任何区别
通过所有这些变化,我已经看到,在r8步骤中的总体占用实际上下降到了5GB以上,但是当运行动作时,如果我试图一次做多个风格,守护进程仍然会消失。
我花了很多时间试图在网上找到更多关于这方面的信息,我所能找到的似乎是人们说要增加最大堆大小,但当我的内存受到运行它的机器的限制时,这不会有帮助。
我有点用完的想法是什么可能导致这一点,任何帮助是赞赏!

3pvhb19x

3pvhb19x1#

问题是ubuntus交换文件的默认大小。在gitHub action(sudo swapon --show)的情况下,它只有~1GB。当ubuntu内存不足(RAM + swapfile)时,它会冻结。(在我启用R8后,发生在我的本地机器上)。我们可以通过增加交换文件作为操作的第一步来解决这个问题:

- name: Increase swapfile
    run: |
      sudo swapoff -a
      sudo fallocate -l 15G /swapfile
      sudo chmod 600 /swapfile
      sudo mkswap /swapfile
      sudo swapon /swapfile
      sudo swapon --show

相关问题