Где по умолчанию используется диспетчер Акки? - PullRequest
0 голосов
/ 01 ноября 2019

У меня в настоящее время довольно большой бэкэнд, написанный на Scala с использованием Play Framework (akka HTTP под капотом) и использующий множество акторов для планирования задач, поддержания состояния и т. Д.

Каждый час "ish"в случайное время я получаю следующее сообщение:

Запланированная отправка пульса была отложена. Предыдущее сердцебиение было отправлено [xxxx] мс назад, ожидаемый интервал - [1000] мс. Это может привести к тому, что обнаружение сбоев пометит участников как недоступных. Причиной может быть нехватка потоков, например, при выполнении задач блокировки на диспетчере по умолчанию, перегрузке ЦП или GC.

Я использую IntelliJ и искал в бэкэнде все места, которые использую context.dispatcher, что соответствует диспетчеру по умолчанию, на который жалуется предупреждающее сообщение. Я использую фьючерсы везде, поэтому я не должен блокировать что-либо важное. Все фьючерсы подкреплены выделенными ExecutionContext s, которые соответствуют собственному исполнителю, которого я создал сам, исполнителю Play Framework (https://www.playframework.com/documentation/2.7.x/ThreadPools#Using-the-default-thread-pool).

. Есть ли какое-то конкретное место, которое я должен искать, которое может раскрыть гдепроблема лежит?

Мой текущий стек выглядит следующим образом:

  • Слаженно с PostgreSQL под капотом для взаимодействия с базой данных.

  • "Play Redis" - com.github.karelcemus для кэша Redis.

Я ожидаю, что с помощью помощи или указателей сообщества я смогу избавиться от этих предупреждающих сообщений!

...