2

データベース: db2、アプリケーション サーバー: websphere 8

データベース内/データベースから値を更新/取得するレストサービスがあります。このサービスは、1 日に多くても 2 回使用されます。したがって、残りの呼び出し間の時間はほぼ 24 時間です。

最初/2番目のリクエストごとに、staleConnection例外がスローされます。3 回目の再試行が行われます。

以下のリンクで指定されているすべてのことを行いました。

古い接続を処理する方法は?

http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/tdat_pretestconn.html

http://www.thejavacode.com/websphere-adapters-stale-connection-problem-t34.html

しかし、まだstaleConnection例外が発生しています。Spring JDBC を使用しているため、使用後に接続を閉じないという問題は見られません。さらに、接続例外が発生した場合に有効な接続を 3 回試行するように、単一の要求内に再試行ロジックを記述しました。

staleconnection初めて例外が発生すると、サービスは 3 秒間待機して接続を再試行しますが、その後の再試行はスローされます

ObjectClosedException: DSRA9110E: 接続が閉じられています。

その後の再試行が既存の古い接続を開こうとしているとは思えません。この問題を解決するにはどうすればよいですか?

間違ったタグが含まれていたら申し訳ありません。

4

3 に答える 3

3

一番の解決策は次のとおりです。接続を失効させないでください。DB2ドライバーまたはサーバーには、これを発生させるものは何もありません。失効した接続の99%は、TCPタイムアウトのあるファイアウォールの破損が原因です。使用するネットワークルートのファイアウォール製品のタイムアウト設定を修正します。

#2の解決策は次のとおりです。

  • 提供したリンクに従って事前テストを設定します。SQLクエリが有効であることを確認してください(たとえばSELECT current date FROM sysibm.sysdummy1
  • プール設定でリープ、未使用、およびエージングタイムアウトを設定して、一定時間後に未使用の接続を破棄します。(プールの最小量を下回った場合は、すぐに新しいプールが確立されます)
  • パージポリシーをEntirePoolに設定します。ただし、これは、プールからの1つの接続でStaleConnectionExceptionが発生すると、WASがプールからすべてを削除し、最小量の要件を満たすために新しい接続を作成することを意味することに注意してください。これにより、パフォーマンスの問題が発生する可能性があります。
于 2013-03-11T20:38:53.807 に答える
1

私は答え(user918176)に同意します。完全を期すために、問題を解決する別の簡単な設定を追加したかっただけです。最小接続プールサイズをゼロに設定します。

StaleConnectionException通常、非アクティブな期間(朝の最初の要求、昼休みの後など)の後に発生します。その間、一部のネットワークデバイスは基盤となるTCP接続を終了します。

unused timeout最小プールサイズをゼロに設定すると、かなり短い期間(デフォルトでは接続が最後に使用されてから1800秒後)後にすべての古い接続が破棄されます。したがって、非アクティブ期間の後、プールには単純な接続がありません(そうでなければ古くなります)。このソリューションにより、構成の変更とパフォーマンスへの影響が最小限に抑えられます(非アクティブ期間後の最初の要求のみが、すぐに使用できる接続を取得する代わりに、db接続が再初期化されるのを待ちます)。

于 2013-03-19T22:07:22.080 に答える
0

最小接続プールを 0 に調整します。デフォルトは 1 です。

于 2016-06-21T14:46:08.963 に答える