0

プールプロバイダーとして c3p0 で Hibernate を使用しています。最大サイズを 50 のみに設定しました。ここで、データベースに継続的にアクセスする 1000 の同時スレッドと 2000 の mysql max_connections を使用して、アプリケーションの負荷テストを実行しました。アプリケーションから適切な応答を得ていますが、ソケット例外エラーに直面することがあります。

最初に、プーリング サイズが 50 のみの場合、hibernate によって 1000 の接続がどのように管理されるのでしょうか。プールから 50 の接続が取得され、残りの接続が作成されるということですか? また、接続リセット例外のようなソケット例外が発生するのはなぜですか?

4

1 に答える 1

0

適切に設定し、c3p0 の maxPoolSize が 50 の場合、1000 のクライアントがプールにヒットすると、50 が最初に接続を取得し、残りは接続が最初のコホートによって返されるまでしばらくの間 wait() します。プールの仕事は、接続をできるだけ短時間保持する必要があるアプリケーションと連携して、限られた数の接続が効率的に共有されるようにすることです。

接続のリセット/ソケット例外が時々発生する場合は、接続テストを設定する必要があります。

http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing

最新のプレリリース バージョンには、接続テストに関するより直接的なアドバイスがあります。それをダウンロードするか、ここから html ソースを読むことができます。

https://github.com/swaldman/c3p0/blob/master/src/doc/index.html#L1071

于 2013-06-12T10:18:21.343 に答える