Skip to content

Commit d18e03c

Browse files
authored
Merge pull request #9212 from igfoo/igfoo/kotlin_mem
Kotlin: Log peak memory usge before and after extractor
2 parents 480c6b9 + 9b40724 commit d18e03c

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.ir.util.*
77
import org.jetbrains.kotlin.ir.IrElement
88
import java.io.File
99
import java.io.FileOutputStream
10+
import java.lang.management.*
1011
import java.nio.file.Files
1112
import java.nio.file.Paths
1213
import com.semmle.util.files.FileUtil
@@ -108,6 +109,7 @@ class KotlinExtractorExtension(
108109
logger.flush()
109110
logger.info("Extraction for invocation TRAP file $invocationTrapFile")
110111
logger.flush()
112+
logPeakMemoryUsage(logger, "before extractor")
111113
if (System.getenv("CODEQL_EXTRACTOR_JAVA_KOTLIN_DUMP") == "true") {
112114
logger.info("moduleFragment:\n" + moduleFragment.dump())
113115
}
@@ -127,6 +129,7 @@ class KotlinExtractorExtension(
127129
fileTrapWriter.writeCompilation_compiling_files_completed(compilation, index, fileExtractionProblems.extractionResult())
128130
}
129131
loggerBase.printLimitedDiagnosticCounts(tw)
132+
logPeakMemoryUsage(logger, "after extractor")
130133
logger.info("Extraction completed")
131134
logger.flush()
132135
val compilationTimeMs = System.currentTimeMillis() - startTimeMs
@@ -135,6 +138,25 @@ class KotlinExtractorExtension(
135138
loggerBase.close()
136139
}
137140
}
141+
142+
private fun logPeakMemoryUsage(logger: Logger, time: String) {
143+
logger.info("Peak memory usage $time")
144+
145+
val beans = ManagementFactory.getMemoryPoolMXBeans()
146+
var heap: Long = 0
147+
var nonheap: Long = 0
148+
for (bean in beans) {
149+
val peak = bean.getPeakUsage().getUsed()
150+
val kind = when (bean.getType()) {
151+
MemoryType.HEAP -> { heap += peak; "heap" }
152+
MemoryType.NON_HEAP -> { nonheap += peak; "non-heap" }
153+
else -> "unknown"
154+
}
155+
logger.info(" * Peak for $kind bean ${bean.getName()} is $peak")
156+
}
157+
logger.info(" * Total heap peak: $heap")
158+
logger.info(" * Total non-heap peak: $nonheap")
159+
}
138160
}
139161

140162
class KotlinExtractorGlobalState {

0 commit comments

Comments
 (0)