треды начинающиеся на DefaultDispatcher-worker
Есть с названием DefaultDispatcher-worker
И наверное это как раз Dispatchers.Default, судя по названию.
Их 8 (столько же и ядер на машине) и они все TIMED_WAITING
Для каждого треда указан стек. Как я понял, те вызовы что выше - значит они "глубже" по вложеннсти.
В каждом из восьми под конец присутсвует
https://pastebin.com/hC1pUDFn
Ну и каждый начинается с
https://pastebin.com/Tqxu1Wif
Как я понял, я вызвал runBlocking во всех тредах дефолтного диспатчера и они встали навечно, так?
Если во всех этих runBlocking разбудить корутину должен код на дефолтном диспатчере, то да
Почти уверен что так и есть
Тоже так думаю. runBlocking в дефолтном диспатчере - почти гарантированный способ подвесить приложение. Самый топчик когда health check работает не через него.
Про health check я не понял. Но у меня прод с вышеуказанным дедлоком работает уже год без единого разрыва. Надеюсь, не накаркаю.
Да это просто из личного опыта, когда приложение встало, а телеметрия показывала, что всё хорошо
Постарайся убрать этот самый runBlocking отовсюду. Еще вариант - поставить на входе в runBlocking проверку треда, если это треди из Dispatchers.Default, то сразу роняй ошибку/ворнинг. Это кстати бы не плохо было бы добавить в поведение по-умолчанию для runBlocking.
Да, было бы не плохо. А с ран блокинг я понял что сделать
https://youtrack.jetbrains.com/issue/KT-45077
Обсуждают сегодня