Profiler
Простой профайлер для замеров времени выполнения блоков кода. Подходит для замеров часто повторяющихся операций - может посчитать среднее время выполнения, максимальное время, 90, 95, 99 перцентили времени выполнения.
Каждый инстанс Profiler ведет свою статистику по точкам замеров. Точки замеров могут быть вложенными, вложенность определяется автоматически.
Пример использования:
val profiler = Profiler()
while (true) {
if (System.currentTimeMillis() - lastStatDumpTime 3000L) {
lastStatDumpTime = System.currentTimeMillis()
logger.info { profiler.getCurrentStats() }
}
val s1 = profiler.start("Main ingestion loop")
val s2 = profiler.start("Channel receive")
val incoming = channel.receive()
profiler.stop(s2)
val s3 = profiler.start("Group values")
val groupedValues = groupValues(incoming)
profiler.stop(s3)
groupedValues.forEach { groupValues ->
val s4 = profiler.start("Process values")
val valueData = processValues(groupValues)
profiler.stop(s4)
val s5 = profiler.start("Send to buffer")
valueData?.let {
sendToBuffer(wdManager, it)
}
profiler.stop(s5)
}
profiler.stop(s1)
}В этом примере получим статистику по замерам в логи, причем замеры "Channel receive", "Group values", "Process values" и "Send to buffer" будут вложены в замеры "Main ingestion loop".
Альтернативный способ использования - использовать функции-обертки profile и profileSuspend, которые автоматически производят замеры времени выполнения блока кода:
profiler.profileSuspend("Main ingestion loop") {
val incoming = profiler.profileSuspend("Channel RCV") { channel.receive() }
val groupedValues = profiler.profile("Group values") { groupValues(incoming) }
groupedValues.forEach { groupValues ->
val valueData = profiler.profile("Process values") { processValues(groupValues) }
valueData?.let {
profiler.profile("Send to buffer") { sendToBuffer(wdManager, it) }
}
}Parameters
Автоматически писать в логи статистику по замерам по завершении каждого корневого замера, но не чаще, чем раз в dumpInterval миллисекунд. По умолчанию false
Интервал между дампами статистики в миллисекундах. По умолчанию 3000 миллисекунд
Constructors
Functions
Возвращает статистику по замерам, отформатированную в строку
Вызывает замер времени выполнения блока кода в корутине
Начинает замер времени выполнения блока кода
Завершает замер времени выполнения блока кода