2016-12-06 19 views
1

Slick3.1.1 + HikariCP2.5.1을 사용하여 AWS t2.medium MySql 인스턴스에 연결합니다. AWS 문서에 따르면 t2.medium에는 최대 연결 수가 312 개가 될 수 있습니다. 내 구성 파일은 다음과 같습니다Slick/HikariCP가 시간 초과 대신 "연결이 너무 많음"

17:05:40.708 DEBUG [] [rdsConfig connection adder] com.zaxxer.hikari.pool.HikariPool - rdsConfig - Cannot acquire connection from data source 
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections 
     at sun.reflect.GeneratedConstructorAccessor59.newInstance(Unknown Source) ~[na:na] 
... 

내가 이것에 대해 혼란 스러워요 :

rdsConfig = { 
    url = "jdbc:mysql://mydb.........us-west-2.rds.amazonaws.com:3306/owlschema" 

    driver = "com.mysql.jdbc.Driver" 
    connectionPool = HikariCP 
    maxConnections = 222   # <<<<< ie make this < 312. 
    keepAliveConnection = true 
    properties = { 
    user = "me" 
    password = "mydarksecret" 
    } 
    numThreads = 40  
} 

내가 '너무 많은 연결'오류를 받기 시작 무거운 부하와 충돌합니다. 문서에서 필자는 AWS 제한을 초과하지 않는 지정된 222 개 이상의 연결을 얻으 려하지 않아야한다고 생각했습니다. 나는 무거운 짐을 당하면서 타임 아웃을 기대했지만 '너무 많은 연결'오류는 없다. 그렇다면 maxConnections은 무엇을합니까? 감사.

+1

'minConnections'를'222'로 설정하면 즉시 발생합니까? (문제가 지정된 것보다 더 많은 연결을 예약하는 Slick 파트에 있는지 확인하십시오. MySQL이 예외를 한도를 훨씬 밑도는 예외가 아닙니다.) –

+0

즉시 발생하지 않습니다. 로그는 연결을 하나씩 열어 줍니 다.로드가 너무 무겁지 않으면 문제가 발생하지 않습니다. 로드가 너무 높아서 연결이 너무 많이 열리는 경우에만 해당됩니다. – thund

+0

'minConnections = 222'를 설정했다는 것을 의미합니까? –

답변

3

고쳐졌습니다. 위의 @Pawel Dolega에서 제안한 것처럼 실험으로 minConnections = 222도 설정합니다. 응용 프로그램을 시작하자마자 즉시로드가 발생하지 않고 too many connections 오류가 발생하기 시작했습니다. 그것은 내 버그로 밝혀졌다 : 그래서 각 클래스 (222 개) 연결 자체 별도의 캡을 사용하고 있었다

trait dbCore { 
    val db = Database.forConfig("rdsConfig") 
} 

: 나는 DB 접근에 필요한 모든 클래스에 다음과 같은 특성을 사용하여되면서 실제로 여러 별도의 데이터베이스 인스턴스를 개방했다 . 이 특성을 객체로 변경하는 대신 버그가 수정되었습니다. 이제 모든 클래스가 동일한 싱글 톤 데이터베이스 인스턴스를 사용하므로 maxConnections 모자를 적절히 준수합니다.

+0

의견을 보내 주셔서 감사합니다. 그것은 나를 많이 도왔다. –