1

SQLServer 2008 データベースを使用して Websphere Application Server 7 でアプリケーションを実行しています。SQLServer が 100% になると、すべての接続がハングし、接続プールがいっぱいになります。これにより、すべてのスレッドもハングします。そして10分後、ログはこれでいっぱいになります:

00000042 ThreadMonitor W   WSVR0605W: Thread "WebContainer : 11" (00000049) has been active for 742352 milliseconds and may be hung.  There is/are 14 thread(s) in total in the server that may be hung.

接続プールは JTDS を使用しており、タイムアウトは 300 秒に設定されています。

300秒後にすべての接続で例外がスローされ、すべてのスレッドがハングアップしないと思いますか?

4

2 に答える 2

2

接続が 300 秒後に例外をスローするのはなぜですか? 接続オブジェクトが使用中の場合は、引き続き有効です。

参照している正確なタイムアウト属性も指定しますか?

于 2012-08-02T00:03:27.587 に答える
2

Connection Timeoutの定義は次のとおりです。

この値は、空きプールに使用可能な接続がなく、新しい接続を作成できない場合に、接続要求が待機する秒数を示します。これは通常、特定の接続プール内の接続が最大値に達したために発生します。

たとえば、接続タイムアウトが 300 に設定されていて、接続の最大数がすべて使用中の場合、プール マネージャーは物理接続が使用可能になるまで 300 秒間待機します。この時間内に物理接続が使用できない場合、プール マネージャーは ConnectionWaitTimeout 例外を開始します。

したがって、「すべてのスレッドのハングを解除」するわけではなく、300 秒後にプールに空き接続がないことを通知するだけなので、接続を提供することはできません。

トランザクションがアクティブである期間を管理するパラメーターは、トランザクション タイムアウトと呼ばれ、その後、トランザクションはロールバックの対象としてマークされます。ただし、このタイムアウトでさえ、接続を使用してスレッドをキャンセルせず、ロールバックのみとしてマークするだけです。接続を解放するには、サード・パーティーのツール (ITCAM はサーバー内のすべてのスレッドを取り消すことができます) を使用するか、データベース側から接続を終了/ドロップする必要があります。

于 2012-08-02T18:45:00.740 に答える