Как исправить утечку памяти в веб-фреймворке ktor kotlin - PullRequest
1 голос
/ 28 мая 2020

Привет, я использую веб-сервер ktor на кубернетах. При запуске экземпляра сервера он использует 250-300 МБ, но после нескольких часов работы использование памяти увеличивается до 600 МБ, и я установил ограничение на 600 МБ после перезапуска этого сервера из-за OOM. Для тестирования, когда память была 500+, я остановил весь трафик сервера c и сгенерировал дамп кучи, который прилагается ниже. Но проблема в том, что после нескольких часов ожидания память сохраняет 500+ МБ. Думаю надо go вернуть нормальные 200-300 Мб. Извините, я не умею проверять дамп кучи на наличие проблем. Не могли бы вы проверить это и сказать мне, где проблема, спасибо.

Сводка дампа кучи This is heap dump summary

ссылка на полный дамп https://www.dropbox.com/s/sdmbgs41b8dgj38/ktor-app-dump.txt?dl=0 и здесь несколько дампов потоков

    "main" prio=5 tid=1 TIMED_WAITING
    at jdk.internal.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(<unknown string>)
    at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:82)
    at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:54)
       local variable: kotlinx.coroutines.BlockingCoroutine#1
       local variable: kotlinx.coroutines.BlockingEventLoop#1
    at kotlinx.coroutines.BuildersKt.runBlocking(<unknown string>:1)
    at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:36)
       local variable: kotlin.coroutines.EmptyCoroutineContext#1
    at kotlinx.coroutines.BuildersKt.runBlocking$default(<unknown string>:1)
       local variable: io.ktor.server.cio.CIOApplicationEngine$start$2#1
    at io.ktor.server.cio.CIOApplicationEngine.start(CIOApplicationEngine.kt:95)
       local variable: io.ktor.server.cio.CIOApplicationEngine#1
    at com.example.myapp.ApplicationKt.main(Application.kt:39)
       local variable: java.lang.String[]#33
       local variable: io.ktor.server.engine.ApplicationEngineEnvironmentReloading#1

"Reference Handler" daemon prio=10 tid=2 RUNNABLE
    at java.lang.ref.Reference.waitForReferencePendingList(Native Method)
    at java.lang.ref.Reference.processPendingReferences(<unknown string>)
    at java.lang.ref.Reference$ReferenceHandler.run(<unknown string>)

"Finalizer" daemon prio=8 tid=3 WAITING
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(<unknown string>)
       local variable: java.lang.ref.ReferenceQueue$Lock#57
    at java.lang.ref.ReferenceQueue.remove(<unknown string>)
       local variable: java.lang.ref.ReferenceQueue#54
    at java.lang.ref.Finalizer$FinalizerThread.run(<unknown string>)
       local variable: java.lang.System$2#1

"Signal Dispatcher" daemon prio=9 tid=4 RUNNABLE

"Common-Cleaner" daemon prio=8 tid=9 TIMED_WAITING
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(<unknown string>)
       local variable: java.lang.ref.ReferenceQueue$Lock#58
       local variable: java.lang.ref.ReferenceQueue#55
    at jdk.internal.ref.CleanerImpl.run(<unknown string>)
       local variable: jdk.internal.ref.CleanerImpl#1
    at java.lang.Thread.run(<unknown string>)
    at jdk.internal.misc.InnocuousThread.run(<unknown string>)

"DefaultDispatcher-worker-1" daemon prio=5 tid=10 TIMED_WAITING
    at jdk.internal.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(<unknown string>)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.kt:783)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.tryPark(CoroutineScheduler.kt:728)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:711)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

"DefaultDispatcher-worker-2" daemon prio=5 tid=11 TIMED_WAITING
    at jdk.internal.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(<unknown string>)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.park(CoroutineScheduler.kt:783)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.tryPark(CoroutineScheduler.kt:728)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:711)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

"DefaultDispatcher-worker-3" daemon prio=5 tid=12 RUNNABLE
    at sun.nio.ch.EPoll.wait(Native Method)
    at sun.nio.ch.EPollSelectorImpl.doSelect(<unknown string>)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(<unknown string>)
       local variable: sun.nio.ch.EPollSelectorImpl#1
       local variable: sun.nio.ch.Util$2#1
    at sun.nio.ch.SelectorImpl.select(<unknown string>)
    at io.ktor.network.selector.ActorSelectorManager.select(ActorSelectorManager.kt:97)
       local variable: io.ktor.network.selector.ActorSelectorManager#1
    at io.ktor.network.selector.ActorSelectorManager$select$1.invokeSuspend(ActorSelectorManager.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
       local variable: io.ktor.network.selector.ActorSelectorManager$process$1#1
       local variable: io.ktor.network.selector.ActorSelectorManager$select$1#1
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
       local variable: kotlin.coroutines.CombinedContext#5
       local variable: kotlinx.coroutines.DispatchedContinuation#2249
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

"mysql-cj-abandoned-connection-cleanup" daemon prio=5 tid=14 TIMED_WAITING
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(<unknown string>)
       local variable: java.lang.ref.ReferenceQueue$Lock#151
       local variable: java.lang.ref.ReferenceQueue#148
    at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:85)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(<unknown string>)
       local variable: com.mysql.cj.jdbc.AbandonedConnectionCleanupThread#1
       local variable: java.util.concurrent.ThreadPoolExecutor#2
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(<unknown string>)
       local variable: java.util.concurrent.ThreadPoolExecutor$Worker#1
    at java.lang.Thread.run(<unknown string>)

"HikariPool-1 housekeeper" daemon prio=5 tid=15 TIMED_WAITING
    at jdk.internal.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(<unknown string>)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(<unknown string>)
       local variable: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject#10
       local variable: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node#5
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(<unknown string>)
       local variable: java.util.concurrent.locks.ReentrantLock#12
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(<unknown string>)
       local variable: java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue#1
    at java.util.concurrent.ThreadPoolExecutor.getTask(<unknown string>)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(<unknown string>)
       local variable: java.util.concurrent.ScheduledThreadPoolExecutor#1
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(<unknown string>)
       local variable: java.util.concurrent.ThreadPoolExecutor$Worker#2
    at java.lang.Thread.run(<unknown string>)

"kotlinx.coroutines.DefaultExecutor" daemon prio=5 tid=19 TIMED_WAITING
    at jdk.internal.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(<unknown string>)
    at kotlinx.coroutines.DefaultExecutor.run(DefaultExecutor.kt:83)
       local variable: kotlinx.coroutines.DefaultExecutor#1
    at java.lang.Thread.run(<unknown string>)

"ktor-cio-dispatcher-worker-2" daemon prio=5 tid=27 RUNNABLE
    at sun.nio.ch.EPoll.wait(Native Method)
    at sun.nio.ch.EPollSelectorImpl.doSelect(<unknown string>)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(<unknown string>)
       local variable: sun.nio.ch.EPollSelectorImpl#2
       local variable: sun.nio.ch.Util$2#2
    at sun.nio.ch.SelectorImpl.select(<unknown string>)
    at io.ktor.network.selector.ActorSelectorManager.select(ActorSelectorManager.kt:97)
       local variable: io.ktor.network.selector.ActorSelectorManager#2
    at io.ktor.network.selector.ActorSelectorManager$select$1.invokeSuspend(ActorSelectorManager.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
       local variable: io.ktor.network.selector.ActorSelectorManager$process$1#2
       local variable: io.ktor.network.selector.ActorSelectorManager$select$1#699
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
       local variable: kotlin.coroutines.CombinedContext#20
       local variable: kotlinx.coroutines.DispatchedContinuation#2947
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.shutdown(CoroutineScheduler.kt:361)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.close(CoroutineScheduler.kt:329)
    at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.close(Dispatcher.kt:73)
    at io.ktor.client.engine.HttpClientEngineBaseKt.close(HttpClientEngineBase.kt:44)
    at io.ktor.client.engine.HttpClientEngineBaseKt.access$close(HttpClientEngineBase.kt:1)
       local variable: kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher#2
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:28)
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:18)
       local variable: io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1#1
    at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1386)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.NodeList#5
       local variable: kotlinx.coroutines.InvokeOnCompletion#4
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
       local variable: java.util.ArrayList#1580
    at kotlinx.coroutines.JobSupport.continueCompleting(JobSupport.kt:932)
    at kotlinx.coroutines.JobSupport.access$continueCompleting(JobSupport.kt:28)
       local variable: kotlinx.coroutines.ChildHandleNode#6
       local variable: kotlinx.coroutines.SupervisorJobImpl#3
       local variable: kotlinx.coroutines.JobSupport$Finishing#1
    at kotlinx.coroutines.JobSupport$ChildCompletion.invoke(JobSupport.kt:1152)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.JobSupport$ChildCompletion#1
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
       local variable: java.util.ArrayList#1579
    at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:903)
       local variable: kotlinx.coroutines.JobSupport$Finishing#2
    at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:860)
    at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:825)
       local variable: kotlinx.coroutines.NodeList#6
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:111)
       local variable: kotlinx.coroutines.LazyStandaloneCoroutine#2
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:32)
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:113)
       local variable: kotlinx.coroutines.TimeoutCoroutine#1
       local variable: kotlin.Result$Failure#2
       local variable: kotlinx.coroutines.CompletedExceptionally#2
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:55)
       local variable: java.lang.Integer#2
       local variable: kotlin.Result$Companion#1
       local variable: kotlinx.coroutines.DispatchedContinuation#7
       local variable: io.ktor.client.engine.cio.Endpoint$postman$1$task$1#1
       local variable: kotlin.coroutines.CombinedContext#21
       local variable: kotlinx.coroutines.channels.ClosedReceiveChannelException#1
       local variable: kotlinx.coroutines.CompletedExceptionally#1
       local variable: kotlin.Result$Failure#1
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
       local variable: kotlinx.coroutines.scheduling.CoroutineScheduler#3
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
       local variable: kotlinx.coroutines.CancellableContinuationImpl#4
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

"ktor-cio-dispatcher-worker-3" daemon prio=5 tid=48 RUNNABLE
    at sun.nio.ch.EPoll.wait(Native Method)
    at sun.nio.ch.EPollSelectorImpl.doSelect(<unknown string>)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(<unknown string>)
       local variable: sun.nio.ch.EPollSelectorImpl#3
       local variable: sun.nio.ch.Util$2#3
    at sun.nio.ch.SelectorImpl.select(<unknown string>)
    at io.ktor.network.selector.ActorSelectorManager.select(ActorSelectorManager.kt:97)
       local variable: io.ktor.network.selector.ActorSelectorManager#3
    at io.ktor.network.selector.ActorSelectorManager$select$1.invokeSuspend(ActorSelectorManager.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
       local variable: io.ktor.network.selector.ActorSelectorManager$process$1#3
       local variable: io.ktor.network.selector.ActorSelectorManager$select$1#280
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
       local variable: kotlin.coroutines.CombinedContext#31
       local variable: kotlinx.coroutines.DispatchedContinuation#2528
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.shutdown(CoroutineScheduler.kt:361)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.close(CoroutineScheduler.kt:329)
       local variable: kotlinx.coroutines.scheduling.CoroutineScheduler#4
    at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.close(Dispatcher.kt:73)
    at io.ktor.client.engine.HttpClientEngineBaseKt.close(HttpClientEngineBase.kt:44)
    at io.ktor.client.engine.HttpClientEngineBaseKt.access$close(HttpClientEngineBase.kt:1)
       local variable: kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher#3
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:28)
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:18)
       local variable: io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1#2
    at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1386)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.NodeList#7
       local variable: kotlinx.coroutines.InvokeOnCompletion#6
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
    at kotlinx.coroutines.JobSupport.continueCompleting(JobSupport.kt:932)
    at kotlinx.coroutines.JobSupport.access$continueCompleting(JobSupport.kt:28)
       local variable: kotlinx.coroutines.SupervisorJobImpl#4
       local variable: kotlinx.coroutines.JobSupport$Finishing#3
       local variable: kotlinx.coroutines.ChildHandleNode#7
    at kotlinx.coroutines.JobSupport$ChildCompletion.invoke(JobSupport.kt:1152)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.JobSupport$ChildCompletion#2
       local variable: kotlinx.coroutines.NodeList#8
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
    at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:903)
    at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:860)
    at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:825)
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:111)
       local variable: kotlinx.coroutines.LazyStandaloneCoroutine#3
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:32)
       local variable: kotlinx.coroutines.TimeoutCoroutine#2
       local variable: kotlinx.coroutines.CompletedExceptionally#3
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:113)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:55)
       local variable: kotlin.coroutines.CombinedContext#32
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
       local variable: kotlinx.coroutines.CancellableContinuationImpl#5
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

"ktor-cio-dispatcher-worker-4" daemon prio=5 tid=53 RUNNABLE
    at sun.nio.ch.EPoll.wait(Native Method)
    at sun.nio.ch.EPollSelectorImpl.doSelect(<unknown string>)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(<unknown string>)
       local variable: sun.nio.ch.EPollSelectorImpl#4
       local variable: sun.nio.ch.Util$2#4
    at sun.nio.ch.SelectorImpl.select(<unknown string>)
    at io.ktor.network.selector.ActorSelectorManager.select(ActorSelectorManager.kt:97)
       local variable: io.ktor.network.selector.ActorSelectorManager#4
    at io.ktor.network.selector.ActorSelectorManager$select$1.invokeSuspend(ActorSelectorManager.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
       local variable: io.ktor.network.selector.ActorSelectorManager$process$1#4
       local variable: io.ktor.network.selector.ActorSelectorManager$select$1#249
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
       local variable: kotlin.coroutines.CombinedContext#33
       local variable: kotlinx.coroutines.DispatchedContinuation#2497
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.shutdown(CoroutineScheduler.kt:361)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.close(CoroutineScheduler.kt:329)
       local variable: kotlinx.coroutines.scheduling.CoroutineScheduler#5
    at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.close(Dispatcher.kt:73)
    at io.ktor.client.engine.HttpClientEngineBaseKt.close(HttpClientEngineBase.kt:44)
    at io.ktor.client.engine.HttpClientEngineBaseKt.access$close(HttpClientEngineBase.kt:1)
       local variable: kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher#4
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:28)
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:18)
       local variable: io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1#3
    at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1386)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.NodeList#9
       local variable: kotlinx.coroutines.InvokeOnCompletion#7
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
    at kotlinx.coroutines.JobSupport.continueCompleting(JobSupport.kt:932)
    at kotlinx.coroutines.JobSupport.access$continueCompleting(JobSupport.kt:28)
       local variable: kotlinx.coroutines.SupervisorJobImpl#5
       local variable: kotlinx.coroutines.JobSupport$Finishing#4
       local variable: kotlinx.coroutines.ChildHandleNode#8
    at kotlinx.coroutines.JobSupport$ChildCompletion.invoke(JobSupport.kt:1152)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.JobSupport$ChildCompletion#3
       local variable: kotlinx.coroutines.NodeList#10
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
    at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:903)
    at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:860)
    at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:825)
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:111)
       local variable: kotlinx.coroutines.StandaloneCoroutine#5
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
       local variable: kotlin.coroutines.CombinedContext#34
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
       local variable: kotlinx.coroutines.CancellableContinuationImpl#6
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

"ktor-cio-dispatcher-worker-3" daemon prio=5 tid=56 RUNNABLE
    at sun.nio.ch.EPoll.wait(Native Method)
    at sun.nio.ch.EPollSelectorImpl.doSelect(<unknown string>)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(<unknown string>)
       local variable: sun.nio.ch.EPollSelectorImpl#5
       local variable: sun.nio.ch.Util$2#5
    at sun.nio.ch.SelectorImpl.select(<unknown string>)
    at io.ktor.network.selector.ActorSelectorManager.select(ActorSelectorManager.kt:97)
       local variable: io.ktor.network.selector.ActorSelectorManager#5
    at io.ktor.network.selector.ActorSelectorManager$select$1.invokeSuspend(ActorSelectorManager.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
       local variable: io.ktor.network.selector.ActorSelectorManager$process$1#5
       local variable: io.ktor.network.selector.ActorSelectorManager$select$1#218
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
       local variable: kotlin.coroutines.CombinedContext#35
       local variable: kotlinx.coroutines.DispatchedContinuation#2466
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.shutdown(CoroutineScheduler.kt:361)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.close(CoroutineScheduler.kt:329)
       local variable: kotlinx.coroutines.scheduling.CoroutineScheduler#6
    at kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher.close(Dispatcher.kt:73)
    at io.ktor.client.engine.HttpClientEngineBaseKt.close(HttpClientEngineBase.kt:44)
    at io.ktor.client.engine.HttpClientEngineBaseKt.access$close(HttpClientEngineBase.kt:1)
       local variable: kotlinx.coroutines.scheduling.ExperimentalCoroutineDispatcher#5
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:28)
    at io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1.invoke(HttpClientEngineBase.kt:18)
       local variable: io.ktor.client.engine.HttpClientEngineBase$close$$inlined$apply$lambda$1#4
    at kotlinx.coroutines.InvokeOnCompletion.invoke(JobSupport.kt:1386)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.NodeList#11
       local variable: kotlinx.coroutines.InvokeOnCompletion#8
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
    at kotlinx.coroutines.JobSupport.continueCompleting(JobSupport.kt:932)
    at kotlinx.coroutines.JobSupport.access$continueCompleting(JobSupport.kt:28)
       local variable: kotlinx.coroutines.SupervisorJobImpl#6
       local variable: kotlinx.coroutines.JobSupport$Finishing#5
       local variable: kotlinx.coroutines.ChildHandleNode#9
    at kotlinx.coroutines.JobSupport$ChildCompletion.invoke(JobSupport.kt:1152)
    at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1529)
       local variable: kotlinx.coroutines.JobSupport$ChildCompletion#4
       local variable: kotlinx.coroutines.NodeList#12
    at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323)
    at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240)
    at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:903)
    at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:860)
    at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:825)
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:111)
       local variable: kotlinx.coroutines.LazyStandaloneCoroutine#4
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:32)
       local variable: kotlinx.coroutines.TimeoutCoroutine#3
       local variable: kotlinx.coroutines.CompletedExceptionally#4
    at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:113)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:55)
       local variable: kotlin.coroutines.CombinedContext#36
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
       local variable: kotlinx.coroutines.CancellableContinuationImpl#7
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Объекты дампа кучи heap dump objects

Объекты дампа кучи по пакетам heap dump objects by package

дайте мне знать, если вы хотите что-нибудь еще. Спасибо

...