2016-12-06 16 views
1

Slick3.1.1 + HikariCP2.5.1を使用して、AWS t2.medium MySqlインスタンスに接続しています。 AWSの文書では、t2.mediumは最大接続数312を持つことができます。私の設定ファイルは次のとおりです。タイムアウトではなく接続が多すぎるSlick/HikariCP

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  
} 

私は「あまりにも多くの接続」エラーを取得を開始重い負荷でそれを打つ時:

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] 
... 

私はこのことについて困惑しています。ドキュメントからは、指定した222以上の接続を取得しようとするべきではないと思っていましたが、AWSの制限を超えることはありません。私は重い負荷の下でタイムアウトを得ることを期待していましたが、「あまりにも多くの接続」エラーではありません。だからmaxConnectionsは何をしますか?ありがとう。

+1

'minConnections'を' 222'に設定すると即座に発生しますか? (問題が、指定されたよりも多くの接続を予約しているSlickの部分にあることを確かめてください; MySQLが制限をはるかに下回る例外を投げるのではなく) –

+0

すぐには起こりません。ログは接続を1つずつ開き、負荷が重すぎない場合は問題がないことを示しています。負荷が高すぎて接続が多すぎる場合のみです。 – thund

+0

あなたは 'minConnections = 222'を設定しても意味はありますか? –

答えて

3

修正済みです。上記の@Pawel Dolegaの示唆したように、私はminConnections = 222も実験として設定しました。アプリケーションを起動するとすぐに、負荷がなくてもtoo many connectionsのエラーが発生し始めました。それは私のバグであることが判明:だから各クラスは222の接続の独自の個別のキャップを使用していた

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

:私は、DBアクセスを必要とするすべてのクラスでは、次の特性を使用していたとして、私は実際には複数の独立したデータベースのインスタンスを開きました。 。この特性をオブジェクトに変更する代わりにバグが修正されました。すべてのクラスが同じシングルトンDatabaseインスタンスを使用するようになり、maxConnectionsキャップが適切に尊重されます。

+0

フィードバックをいただきありがとうございます。それは私をたくさん助けました。 –

関連する問題