Hibernate Web应用程序

时间:2017-01-12 13:06:49

标签: hibernate hibernate-postgresql

我已经开发了带有hibernate框架的企业应用程序。当用户数量激增时(当用户数超过200时),应用程序会挂起。我尝试了以下方法,但问题仍然存在。

1)C3PO连接池(事先没有使用连接池)

2)将休眠连接池大小增加到300(值100之前)

3)将getCurrentSession方法更改为openSession

hibernate.cfg.xml文件     connection.pool_size = 300

使用此方法调用大多数应用程序查询 -

@覆盖

public List getLovServiceSqlParam(String query,Object [] obj){

    // TODO Auto-generated method stub
    Session session = null;
    if (this.getHibernateTemplate() != null && query != null
            && query.length() > 0) {

        try
        {
            session = this.getHibernateTemplate().getSessionFactory().openSession();
            SQLQuery query1 = session.createSQLQuery(query);

            for(int i=0;i<obj.length;i++)
            {
                query1.setParameter(i, obj[i]);
            }
            result = query1.list();
            session.close();
        }
        catch (DataAccessException e) {
            e.printStackTrace();
            throw e;
        }

        finally
        {
            if (session != null && session.isOpen()) {
                session.close();
            }
        }

    }

    return result;
}

1 个答案:

答案 0 :(得分:0)

通过查看代码,但是在加载的应用程序上运行cpu采样工具(如jvisualvm,free并包含在oracle JVM包中,查看那里:$JAVA_HOME/bin/jvisualvm),这种情况无法解决。< / p>

查看您的UI线程花费大部分时间的位置,并一个接一个地优化这些部分。

这可能是由于没有更多的数据库连接,或者是因为某些查询或其他问题的争用,完全出乎意料。只有在运行cpu采样分析后才能知道。

要做到这一点,

  • 将jvisualvm连接到负载下的应用程序(可能不容易获得与生产环境显示相同行为的环境,但是获取jvisualvm访问生产环境可能更难,具体取决于IT规则你工作),
  • 切换到Sampler标签,然后点击CPU按钮
  • 在您的UI上触发操作(通常此操作应该具有意外行为(太慢?))。
  • 完成后,点击Snapshot按钮。
  • 从那里找到您的UI线程(可能不容易),然后查看它花费大部分时间的位置。
  • 优化此部分