日期:2014-05-18  浏览次数:20770 次

紧急求助,JSP网站速度变慢,怎么优化
硬件架构:
  应用服务器: IBM X3660服务器 + RedHat 4.0(企业版) + JDK1.4.2 + tomcat5.0.28
  tomcat5.0.28同时支持两个管理系统,我们所做的这个连接池最高上限为300。
   
  数据库服务器:IBM x3660服务器 + redhat4.0(企业版) + Oracle9i
  ORACLE数据库连接数为默认值
   
  开发软件技术: JSP + JS + Spring2.0

故障描述:
  系统无缘无故的变慢,变慢的时候我们查看数据库活动会话连接数在160左右,而且在不断增长,
  重启数据库系统速度变回正常,过上一会又变成这样。

  这个网站的用户量比较大,问问各位老大怎么优化这个系统,好歹一个月重启一回就行,
  这个系统不计成本,可以考虑加硬件等等,各位帮忙给出个软件和硬件的优化方案吧。小弟先行谢过了

------解决方案--------------------
会不会是DAO层写的有问题啊,连接没有及时释放?
------解决方案--------------------
建议检查数据库操作完成之后有没有释放资源。
还有,不计成本的话,把tomcat换成weblogic,jboss这些服务器吧。
------解决方案--------------------
控制台有没有东西打出来的??有时候有些东西打出来会变慢的。。我现在也在找解决方法。
------解决方案--------------------
没有实质性的东西、没有数据量大小,描述不充分,无法解决。
------解决方案--------------------
无语,这种连接在多线程环境下不可能释放的。

在这个论坛不知道说了多少次了,请不要把数据库的连接对象弄成成员变量!
------解决方案--------------------
数据库连接对象指的是 Connection, PreparedStatement, ResultSet 把他们搬回到局部变量中去,老老实实地采用最为普通办法。
------解决方案--------------------
探讨
数据库连接对象指的是 Connection, PreparedStatement, ResultSet 把他们搬回到局部变量中去,老老实实地采用最为普通办法。

------解决方案--------------------
按楼上说的做吧:把数据库连接对象做成局部变量去
------解决方案--------------------
你的这个所谓的数据库连接文件,有大量的地方需要改动。

1,DataSource 可以弄成成员变量,因为这个从 JNDI 上得到的实例只要实例化一次就行了;
2,不要把数据库连接对象当作是普通变量传来传去的,标准的做法应该是这样的:

Java code
public List<Student> getAllStudents() {
    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    List<Student> students = new ArrayList<Student>();
    try {
         con = ConnectionFactory.getConnection();
         String sql = "SELECT s.id, s.name, s.age FROM Student s ";
         ps = con.prepareStatement(sql);
         rs = ps.executeQuery();
         while(rs.next()) {
             Student stu = new Student();
             stu.setId(rs.getInt("id"));
             stu.setName(rs.getString("name"));
             stu.setAge(rs.getInt("age"));
             students.add(stu);
         }
    }catch(SQLException e) {
         ....
    }finally{
         JdbcUtil.close(rs, ps, con);
    }
    return students;
}

------解决方案--------------------
探讨
引用:
数据库连接对象指的是 Connection, PreparedStatement, ResultSet 把他们搬回到局部变量中去,老老实实地采用最为普通办法。


学习了学习了
要是需要使用很多次怎么弄啊?
那不就得创建多次局部变量吗?