紧急求助,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 把他们搬回到局部变量中去,老老实实地采用最为普通办法。
------解决方案--------------------
------解决方案-------------------- 按楼上说的做吧:把数据库连接对象做成局部变量去
------解决方案--------------------
你的这个所谓的数据库连接文件,有大量的地方需要改动。
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;
}
------解决方案--------------------