这些天来,我向我的项目添加了一个代码包,Gradle构建在Github操作中失败,一些测试在运行Gradle测试任务时抛出OOM错误。
项目技术堆栈为Spring Boot 3/R2dbc + Kotlin 1.8/Kotlin协同程序+Java 17(Gradle Java语言级别设置为17)
生成工具堆栈。
- 本地系统:Windows 10专业版(配备16G内存)/Oracle JDK 17/Gradle 7.6(项目Gradle Package 器)
- Github操作:带有16G内存的自定义Ubuntu/Amazon JDK 17
经过研究,我们使用了一个具有16G内存的自定义更大的runner,并将Gradle JVM堆大小增加到8G,但没有任何帮助。
org.gradle.jvmargs=-Xmx8g -Xms4g
我们在运行测试时仍然会得到以下错误。但是测试代码本身不是问题,它们已经在我的本地机器上传递了。
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message can't create name string at src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 827
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ClassGraph-worker-439"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ClassGraph-worker-438"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "boundedElastic-evictor-1"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ClassGraph-worker-435"
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message can't create name string at src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 827
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ClassGraph-worker-433"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ClassGraph-worker-436"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "ClassGraph-worker-432"
1条答案
按热度按时间djp7away1#
该错误似乎发生在Gradle工作进程中。Gradle执行单独的JVM进程来运行测试,这些进程的内存设置与Gradle主进程. This by default uses 512mb不同。
您可以执行不同的操作来解决此问题:增加该工作进程的堆,或者减少每个工作进程中执行的测试数量。可以通过两种方式减少测试数量:或者为每个模块分叉多个并行进程,或者为每个新进程分叉固定数量的测试。
请看一下Gradle testing documentation for more details中的这些选项。你可以用下面的代码控制所有这些设置(我不建议同时应用所有这些设置,这只是为了说明这些选项)。
在任何情况下,我的建议都是对构建进行概要分析,以准确地找出哪些进程耗尽了内存,什么是最合适的内存设置,并可能确定产生这种情况的泄漏在哪里。