0

この奇妙な問題があります。WebアプリケーションがJNDIを介してAS400DB2サーバーに接続し、JNDIから接続を取得するのに約930〜960秒かかります!!! 通常、接続にかかる時間は4ミリ秒で、場合によっては15分になります...いつ/なぜ発生するかについての特別なルールはありません。JTOpenjt400.jarドライバーバージョン7.0を使用しています。

プール内のアイドル接続数は最低20、プール内の接続数は最大200に設定されており、以前は10人がWebアプリケーションで作業していたため、一度に10以上の接続を利用する可能性はほとんどありません。 ..

4

5 に答える 5

1

アプリケーションでガベージ コレクション統計レポートを有効にします。

私の推測では、JNDI ルックアップは大きく、小さなプールで大きなプログラムを処理するには時間がかかる「ストップ ザ ワールド」ガベージ コレクションをトリガーします。

2 番目の推測は、接続が接続プールに適切に返されないため、JNDI ルックアップは、接続が古くなって破棄され、アプリケーションが取得する新しい接続に置き換えられるまで待機する必要があることです。

于 2010-09-06T10:37:37.827 に答える
0

うーん、15 分というのは典型的なタイムアウト時間のように聞こえます。おそらく DNS サーバーの構成が間違っているからでしょう。関連するすべてのシステムのホスト名に対して ping を実行してみてください。

于 2010-09-21T21:06:21.140 に答える
0

接続が不要になった場合は、常に接続を適切に閉じるようにしてください。そうしないと、ますます多くの接続を割り当て続けることになり、最終的に DB2 サーバーはそれ以上の接続を提供しなくなります。既存の接続がタイムアウトになるまで数分間待機し、その接続を提供します。

接続の数を確認するには、DB の状態 (誰が接続しているか、何をしているか、どのクエリがデッドロックでハングしているかなど) を監視するための多数のビューを備えた優れたAdvanced Query Toolを入手してください。確かにお金はかかりますが、バグを探す時間を 1 日短縮できるなら、それだけの価値があります。

于 2010-09-21T15:31:04.387 に答える
0

問題を診断するために、いくつかの点を確認することをお勧めします。

  1. 最初に行うことは、この長いルックアップ中に接続プールの状態を監視することです。これにより、接続の実際の取得に問題があるかどうかを確認できます。接続を適切に閉じるかどうかに関係なく、タイミングも重要です。たとえば、ユーザー セッションごとに接続を開き、有効期限が切れるまで閉じないようにすることができます。
  2. DB 設定をチェックして、接続プールの設定と同じかどうかを確認してください。
  3. データベースのレベルでロックしているかどうかを確認してください。これが、私が以前使っていたかなり調整されたアプリケーションを動かなくなった理由でした。この問題は、アプリケーションにアクセスするユーザーが記録された監査レコードにありました。それぞれが更新のためにこのレコードにアクセスするため、トランザクションは常にタイムアウトしました
于 2010-09-21T16:02:29.650 に答える
0

同様のトピックに関する記事を読んでください。Java SecureRandom エントロピーは、SecureRandom の実装によってアプリケーションが約 20 ~ 30 分間遅延する原因について説明しています。たぶん、それからのいくつかのデバッグ方法は、あなたがそれを整理するのに役立つかもしれません.

于 2010-09-22T18:38:24.053 に答える