Подтвердить что ты не робот

Scala/Slick, ошибка "Время ожидания после 20000 мс ожидания"

В блоке ниже приведена ошибка.

  Timeout after 20000ms of waiting for a connection.","stackTrace":[{"file":"BaseHikariPool.java","line":228,"className":"com.zaxxer.hikari.pool.BaseHikariPool","method":"getConnection"

Кроме того, мои обращения к базе данных кажутся слишком медленными, каждый элемент xs.map() занимает около 1 секунды. Ниже, getFutureItem() вызывает db.run().

xs.map{ x => 
    val item: Future[List[Sometype], List(Tables.myRow)] = getFutureItem(x)         
    Await.valueAfter(item, 100.seconds) match {
        case Some(i) => i
        case None => println("Timeout getting items after 100 seconds")
    }
}

Slick записывает это с каждой итерацией значения "x":

[akka.actor.default-dispatcher-3] [akka://user/IO-HTTP/listener-0/24] Connection was PeerClosed, awaiting TcpConnection termination...
[akka.actor.default-dispatcher-3] [akka://user/IO-HTTP/listener-0/24] TcpConnection terminated, stopping
[akka.actor.default-dispatcher-3] [akka://system/IO-TCP/selectors/$a/0] New connection accepted
[akka.actor.default-dispatcher-7] [akka://user/IO-HTTP/listener-0/25] Dispatching POST request to http://localhost:8080/progress to handler Actor[akka://system/IO-TCP/selectors/$a/26#-934408297]

Моя конфигурация:

"com.zaxxer" % "HikariCP" % "2.3.2"

default_db {
  url = ...
  user = ...
  password = ...
  queueSize = -1
  numThreads = 16
  connectionPool = HikariCP
  connectionTimeout = 20000
  maxConnections = 40
}

Есть ли что-то очевидное, что я делаю неправильно, что приводит к тому, что эти обращения к базе данных настолько медленны и вызывают эту ошибку? При необходимости я могу предоставить дополнительную информацию.

EDIT: я получил одну рекомендацию, что проблема может быть ошибкой загрузчика классов, и что я могу ее решить, развернув проект как один .jar, а не запуская его с помощью sbt.

EDIT2: после дальнейшего осмотра выяснилось, что многие соединения остаются открытыми, что в конечном итоге привело к отсутствию соединений. Вероятно, это можно устранить, вызвав db.close(), чтобы закрыть соединение в соответствующее время.

EDIT3: Решено. Соединения, сделанные slick, превысили максимальные соединения, разрешенные моей конфигурацией mysql.

4b9b3361

Ответ 1

OP писал (а):

EDIT2: после дальнейшего осмотра выяснилось, что многие соединения остаются открытыми, что в конечном итоге привело к отсутствию соединений. Вероятно, это можно устранить, вызвав db.close(), чтобы закрыть соединение в соответствующее время.

EDIT3: Решено. Соединения, сделанные slick, превысили максимальные соединения, разрешенные моей конфигурацией mysql.