0

我的 VPS 主机上有 jsp webapp,tomcat 7 作为服务器。我正在使用 Hibernate 3 和 PostgreSQL。我的类 DBManager 中的所有方法(负责数据库服务、连接、查询)都使用几乎相同的结构:

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

问题是我的 VPS 一段时间后(使用我的 webapp)显示了许多空闲的 postgres 进程,这会导致服务器过载,而前 VPS 会杀死 Java 或拒绝连接到数据库。我能做些什么来消除这个问题?这是由我的代码或其他原因引起的问题吗?

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 回答