From 93e8b18cde99f462d7824c7dd3061bf29b93322d Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Sat, 2 Mar 2024 14:59:19 +0100 Subject: [PATCH] Build: Limit default max metaspace for test processes Some test proceses grow much bigger than max heap size. Metaspace also should be limited to avoid OOM Killer events. #KTI-1609 --- .../buildsrc-compat/src/main/kotlin/tasks.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt index 99b60967fc4..a86a9751331 100644 --- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt +++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/tasks.kt @@ -133,6 +133,7 @@ fun Project.projectTest( jUnitMode: JUnitMode = JUnitMode.JUnit4, maxHeapSizeMb: Int? = null, minHeapSizeMb: Int? = null, + maxMetaspaceSizeMb: Int = 512, reservedCodeCacheSizeMb: Int = 256, defineJDKEnvVariables: List = emptyList(), body: Test.() -> Unit = {}, @@ -211,18 +212,19 @@ fun Project.projectTest( "-XX:+HeapDumpOnOutOfMemoryError", "-XX:+UseCodeCacheFlushing", "-XX:ReservedCodeCacheSize=${reservedCodeCacheSizeMb}m", + "-XX:MaxMetaspaceSize=${maxMetaspaceSizeMb}m", "-Djna.nosys=true" ) val junit5ParallelTestWorkers = project.kotlinBuildProperties.junit5NumberOfThreadsForParallelExecution ?: Runtime.getRuntime().availableProcessors() - val memoryPerTestProcessMb = maxHeapSizeMb ?: if (jUnitMode == JUnitMode.JUnit5) + val memoryPerTestProcessMb = if (jUnitMode == JUnitMode.JUnit5) totalMaxMemoryForTestsMb.coerceIn(defaultMaxMemoryPerTestWorkerMb, defaultMaxMemoryPerTestWorkerMb * junit5ParallelTestWorkers) else defaultMaxMemoryPerTestWorkerMb - maxHeapSize = "${memoryPerTestProcessMb}m" + maxHeapSize = "${maxHeapSizeMb ?: (memoryPerTestProcessMb - maxMetaspaceSizeMb)}m" usesService(concurrencyLimitService) if (minHeapSizeMb != null) {