4

I'm developing a Java EE based application using Tomcat as server and MySQL as database. I have configured the connection pool for 50 users.

Now my question is, if at a given time there are 51 users accessing the application (simultaneously), what will happen to the 51th user? (as the application supports only 50 connections at a time)

My requirement is that for the 51st user I need to show a message like " Please access after some other time".

Is this possible?

4

4 に答える 4

11

接続プールが50の場合、WebAppからDBへの接続が最大50になることを意味します。これは、アプリに同時に接続できるユーザーの最大数を意味するものではありません。

多くのユーザーが同時にアプリを使用している場合でも、すべてのユーザーがDBへの接続を使用しているわけではありません(たとえば、アイドリング、静的ページの表示、キャッシュからのデータの取得など)。

使用している接続プールについては言及していませんが、適切なライブラリを使用しており、適切に使用していると思います。たとえば、クエリを終了するたびにconnection.close()を呼び出して、接続をプールに返します。

この場合、心配する必要はありません。プールがすべて使い果たされた場合、次のユーザーは、1つの接続がプールに返されるまでキューに入れられます。

したがって、タイムアウトを追加してこのキュー時間を検出できます。たとえば、5〜10秒以内にDriverManager.getConnection()が返されない場合は、プールがいっぱいであると想定し、そのメッセージを含む静的ページにユーザーをリダイレクトします。

このイベントをログに記録してください。そうすれば、ほとんどの場合プールがいっぱいになることがわかっている場合は、最大接続数を増やすことができます。

于 2012-06-13T09:56:14.947 に答える
2

接続プール自体は Tomcat によって管理されるため、アプリケーションからは見えません。簡単に言えば、開発者としてのあなたはそれを知りませんし、気にするべきではありません。

代わりにできること (そしてすべきこと) は、実際に必要以上に接続を保持しないようにすることです。そうすれば、接続プールを無駄にビジー状態に保つことはありません。

あなたの質問は?Tomcat は 51 番目の接続要求をキューに入れ、使用可能な接続ができるとすぐに実際の接続が行われます。

于 2012-06-13T09:42:19.580 に答える
1

アプリが適切に作成されていれば、接続をプールからチェックアウトし、操作を実行するのに十分な時間だけ接続を維持し、すぐにプールに戻して他のユーザーが使用できるようにします。

これを行うと、50 の接続で 50 を超えるユーザーにサービスを提供できる可能性があります。

セッションごとに 1 つの接続にしがみつくと、間違いを犯します。それは決してスケーリングできません。

于 2012-06-13T09:37:37.480 に答える
0

通常、接続プールには最大接続構成パラメーターが含まれています。これは、db で設定される最大接続数を指定します。接続が解放されるとすぐに、プールに戻されます。プールのmaxConnectionsの選択では、非常に賢明でなければなりません。この数は、通常のユーザー トラフィック シナリオでデータベース接続要件を処理できる接続数である必要があります。その場合、ほとんどのシナリオで接続数がmaxConnectionsを超えている場合は、この数を増やす必要があります。あなたの場合、同時に 50 人以上のユーザーに簡単にサービスを提供できると思います。それとは別に、アプリケーションロジックにも依存します。不必要に長期間接続を保持してはならず、接続が完了したら接続を解放する必要があります。

ただし、一部の接続プールの実装では、アプリケーションの負荷が異なる場合に接続プールのサイズを変更することもできます。

于 2016-11-18T06:09:17.777 に答える