1

Hibernate 3 を使用していますが、接続が閉じられていることに関連する問題に直面しています。

c3p0-0.9.1.2.jar を使用しており、Hibernate によって開かれたデータベース サーバーへの接続を確認したところ、5 つの接続が確立されていることがわかりました。サーバーの一部の TCP ポートで (以下のログを参照)。

ただし、これらの確立された接続は、確立された TCP ポートを変更し続けるため、それらが使用していた以前のポートを解放し、これらのポートを (閉じるのではなく) TIME_WAIT 状態にします。

これは継続し、数百の数を数えます。TIME_WAIT 状態の接続の場合。

何が起こっているのか、ポートが確立された状態から TIME_WAIT に切り替わっていて、以前のポートが閉じていない理由がわかりません。

以下は、NETSTAT -ano|find "x.9" を実行して取得したサンプルです。x.9 はデータベース サーバーの IP です。

TCP     x.124.x.66:4379     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4381     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4382     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4383     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4384     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4385     x.124.x.9:1433      TIME_WAIT       0

TCP     x.124.x.66:4386     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4387     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4388     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4389     x.124.x.9:1433      ESTABLISHED     5916

TCP     x.124.x.66:4390     x.124.x.9:1433      ESTABLISHED     5916

私が使用する Hibernate.properties ファイル。

hibernate.c3p0.min_size=5
hibernate.c3p0.timeout=2
hibernate.c3p0.max_size=50
hibernate.c3p0.idle_test_period=10000
hibernate.connection.release_mode=auto

手伝ってくれてありがとう。

4

1 に答える 1

3

TIME_WAITは、一方または両方の側が既に接続を終了しているが、まだ閉じていない状態です。オペレーティング システムによっては、接続が TIME_WAIT にある時間を微調整できます。したがって、これは悪い意味ではなく、新しい接続の作成を妨げているものが多すぎない限り、パフォーマンスに影響を与えません。

質問の他の部分では、クライアントがホスト名と宛先ポートで指定されたサーバーに接続すると、クライアント側の接続はポートに割り当てられます。これは、接続が宛先ホスト、宛先ポート、送信元ホスト、送信元ポートの4 つによって識別されるためです。

これはまさに netstat 出力で起こっていることです。プールによって作成された確立された接続が 5 つあり、TIME_WAIT 状態ですぐに閉じられる接続がいくつかあります。それぞれに、範囲から動的に割り当てられた独自の送信元ポートがあります。これは完全に正常です。

于 2009-11-13T12:32:02.487 に答える