0

サーバーとしてTomcat 7を使用して、VPSホストにjsp webappがあります。Hibernate 3 と PostgreSQL を使用しています。クラス DBManager (db サービス、接続、クエリを担当) のすべてのメソッドは、ほぼ同じ構造を使用します。

 Session session = sessionFactory.openSession();
    session.beginTransaction();
    =======
    HERE HQL QUERY/session.get/update/save etc are executed
    =======
    session.getTransaction().commit();
    session.close();

問題は、(webapp を使用して) しばらくすると VPS が多くのアイドル状態の postgres プロセスを表示し、サーバーの過負荷を引き起こし、ex VPS が Java を強制終了するか、DB への接続を拒否することです。問題を解決するにはどうすればよいですか? これは私のコードまたは他の何かによって引き起こされた問題ですか?

4

2 に答える 2

0

ブロックに配置session.close()する必要があります:try/finally

try {
  session.beginTransaction();
  =======
  HERE HQL QUERY/session.get/update/save etc are executed
  =======
  session.getTransaction().commit();
} catch (SQLException sqle) {
  // handle the exception, e.g. session.getTransaction().rollback();
} finally {
  session.close(); // this will require another try/catch
}

コードのどこかで例外が発生した場合、セッションは閉じられず、リソースがリークします。

于 2013-02-06T20:25:51.210 に答える
0

問題が解決しました。私が間違っていたのは、クラスの各インスタンスに新しいファクトリを作成することでした。今、どこにでも静的参照を追加しましたが、かなりうまく機能しています。

于 2013-03-07T18:36:41.470 に答える