質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.63%

jdbcのコネクションプールの数を広げたい

受付中

回答 1

投稿

  • 評価
  • クリップ 3
  • VIEW 8,123

k499778

score 542

現在Java,SpringBoot,MySQL,TomcatでWebアプリケーションを作っています。

負荷テストを実施していて1分間で240スレッドのテストを実施したい際に以下のようなエラーになったので解決したいです。

org.springframework.transaction.CannotCreateTransactionException: 
Could not open JDBC Connection for transaction; nested exception is 
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available,
 request timed out after 30000ms.

Tomcatのバージョンは8.52です。

SpringBootの設定ファイル(application.yml)で以下のような設定を入れました。

spring:
 datasource:
   continue-on-error: false
   driver-class-name: com.mysql.jdbc.Driver
   initialization-mode: never
#    type: org.apache.tomcat.jdbc.pool.DataSource
   tomcat:
     max-active: 300

もともと動いていたところにmax-active: 300を入れました。
しかし、負荷テストの結果は同じで負荷に耐え切れず上記のようなエラーが出ました。

type: org.apache.tomcat.jdbc.pool.DataSource
が必要だと思ったのですが、コメントを外すとwebサーバー起動時にエラーが出てそれを解決できずにいます。

2018-11-01 14:17:30.689 ERROR 6916 --- [ost-startStop-1] o.s.b.web.embedded.tomcat.TomcatStarter  : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'sessionRepositoryFilterRegistration' defined in class path resource [org/springframework/boot/autoconfigure/session/SessionRepositoryFilterConfiguration.class]: Unsatisfied dependency expressed through method 'sessionRepositoryFilterRegistration' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSessionRepositoryFilter' defined in class path resource [org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'springSessionRepositoryFilter' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in class path resource [org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSessionJdbcOperations' defined in class path resource [org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'springSessionJdbcOperations' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Generic.class]: Unsatisfied dependency expressed through method 'dataSource' parameter 0; nested exception is org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties': Could not bind properties to 'DataSourceProperties' : prefix=spring.datasource, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.datasource.type' to java.lang.Class<javax.sql.DataSource>
2018-11-01 14:17:30.704  INFO 6916 --- [  restartedMain] o.apache.catalina.core.StandardService  : Stopping service [Tomcat]

負荷テストのエラーを解決する方法(おそらくコネクションプールの数を広げる)を教えていただけないでしょうか?
上記のエラーも踏まえてわかる方がいればお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • rubytomato

    2018/11/01 22:26

    Java, Spring Bootのバージョンはなんでしょうか? 差支えなければ質問文に追記してください。

    キャンセル

  • k499778

    2018/11/02 03:23

    Java1.8, SpringBoot 2.0.4.RELEASE です

    キャンセル

回答 1

0

ログに java.sql.SQLTransientConnectionException: HikariPool-1  とあるので、HikariConnectionPoolを使っていると推測されますから、Hikari用の設定を修正しないと反映されないでしょう。

そこから推察するにSpringBoot2系の設定を利用されていると思われますので、例えば、

application.yml

spring:
  datasource:
    url: jdbc:mariadb://127.0.0.1:3306/retry_sample
    username: root
    password: password
    hikari:
      connection-timeout: 3000
      connection-test-query: SELECT 1
      maximum-pool-size: 50
      minimum-idle: 5
      validation-timeout: 1000

hikari用の設定に設定値を記載すると、接続数の変更が反映されると思います。(上記の内容を適宜変更してください。)

また、MySQL側の最大接続数も調整した上で接続プールの本数と待機時間を決めると良いでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/02 10:24

    了解しました。
    ただやはりエラーが出てしまいます。長すぎて弾かれるので原因だけ書いてます。
    Caused by: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2830)

    キャンセル

  • 2018/11/02 11:49

    タイムアウトしているようなので、Spring側のタイムアウト設定と、MySQL側のタイムアウト設定を両方確認するのが良いのでは。

    キャンセル

  • 2018/11/02 13:47

    connect_timeoutでなく、wait_やinteractive_でしょうか?

    参考
    https://teratail.com/questions/17853

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る