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
}

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

РЕДАКТИРОВАТЬ: я получил одну рекомендацию о том, что проблема может быть ошибкой загрузчика классов, и что я могу решить ее, развернув проект как один .jar, а не запуская его с помощью sbt.

РЕДАКТИРОВАТЬ 2: после дальнейшей проверки выяснилось, что многие соединения оставались открытыми, что в конечном итоге привело к тому, что соединения были недоступны. Скорее всего, это можно решить, вызвав db.close(), чтобы закрыть соединение в нужное время.

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


person user2827214    schedule 10.08.2015    source источник
comment
Это стоит прочитать, но вряд ли это ваша основная причина: github.com/ brettwooldridge/HikariCP/wiki/About-Pool-Sizing   -  person fncomp    schedule 15.08.2015
comment
Вы указали драйвер? Должен быть гладкий драйвер и драйвер JDBC AFAIK.   -  person fncomp    schedule 15.08.2015
comment
Пожалуйста, добавьте разрешение в поле ответа и закройте его.   -  person Som Bhattacharyya    schedule 05.04.2016


Ответы (1)


ОП написал:

РЕДАКТИРОВАТЬ 2: после дальнейшей проверки выяснилось, что многие соединения оставались открытыми, что в конечном итоге привело к тому, что соединения были недоступны. Скорее всего, это можно решить, вызвав db.close(), чтобы закрыть соединение в нужное время.

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

person Community    schedule 01.06.2016