私はTomcat上でHibernateとC3P0を使ってJava Webアプリケーションを実行しています。すべてのエンティティクラスとJPAコントローラはNetbeans wizzardで実行されました。サーブレットが呼び出されると、(JPAコントローラを使用して)データベースに多数のオブジェクトが挿入されます。C3P0たくさんのスレッドとタイマーを作成する
問題は、私のwebappをJava VisualVMで見ると、多くのTimersクラスとcom.mchange.v2.async.ThreadPoolAsynchronousRunnerクラスがあり、時間が経つにつれて大きくなることがわかりました。タイマーごとに3つのスレッドが作成されます。
すべてのスレッドとタイマーはWAIT状態にあります。この問題は、アプリケーションのOutOfMemoryエラー(Javaヒープスペース)の後ろにある可能性があります。生成する。サーブレットがタスクを終了したときにすべての接続が閉じられていることがMySQL管理者に分かっていても、一部のオブジェクトがまだメモリに残っている可能性があります。
C3P0が「WAIT」状態で700個以上のTimerasと2100 Threadsを作成するのは正常ですか?あなたが任意のコードを投稿していなかったとして
おかげ
エセキエル
ボリスさんに感謝します。C3P0のない同じコードは、C3P0の同じコードよりもメモリ消費量がはるかに少ないことが分かりました。 C3P0に接続プールの再利用を明示するにはどうすればよいですか?または、少なくとも新しいプールを作成していることがわかります。ありがとう。 – Ezequiel
C3P0に再利用を指示することはできません。あなたはそれを自分で再利用する必要があります。あなたのやり方はあなた次第です(静的変数、jndi、注射、...) – Boris
私は同じ問題を抱えていますが、答えが役に立たない – ayengin