我已经开发了带有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;
}
答案 0 :(得分:0)
通过查看代码,但是在加载的应用程序上运行cpu采样工具(如jvisualvm,free并包含在oracle JVM包中,查看那里:$JAVA_HOME/bin/jvisualvm
),这种情况无法解决。< / p>
查看您的UI线程花费大部分时间的位置,并一个接一个地优化这些部分。
这可能是由于没有更多的数据库连接,或者是因为某些查询或其他问题的争用,完全出乎意料。只有在运行cpu采样分析后才能知道。
要做到这一点,
Sampler
标签,然后点击CPU
按钮Snapshot
按钮。