tomcat4带40个客户机以后就经常出问题,怎么解决?高手指点!

J2EE 码拜 6年前 (2015-05-11) 164次浏览 0个评论
 

一台服务器,40台客户机,用20台的时候基本正常,但是40台同时使用的时候就经常出现网页打不开的错误,而且有的时候报http500的错误。
但是连接少的时候就没问题。

程序就是一个考试系统的web应用,40台考试机,每个机器是考生登录后考试,用到了struts和hibernate

从各位高手的经验来看,是tomcat的问题还是程序的问题?

用resin是不是稳定些,或者用apache+tomcat还是apache+resin?

高手指点!

10分
应该不会啊用tomcat,会不会是你的数据库操作部分不完善!
10分
40个一点都不多,应该是你的程序有待改善
10分
一般情况下,tomcat承载2000个客户是没有问题的。当然apache+tomcat会比单独一个tomcat要好的多。
10分
你的服务器配置是什么。加点内存看看。
服务器是p4 2.8g 512M内存的pc服务器

会不会是因为有病毒阻塞网络造成的??

10分
应该没什么问题的,
内存也不是太小,首先看一下你程序里有没有没关的数据库连接,
tomcat的设置和apache的设置是怎样的?
再看一下是否用了太多的session?
我用的是hibernate,查询完以后都会session.close(),

用的session比较多,每个客户机都要保存一个实例到session中去,这样不会有太大的影响吧?

还有就是tomcat起初运行正常,但是运行一段时间以后就会频繁报http500错,这是什么原因呢?

5分
用连接池
5分
在数据库连接的时候应该用连接池
5分
程序问题吧,用Resin肯定是比Tomcat要快的,不过同样的代码运行结果有时不一定相同!
5分
session过多肯定会有影响的,一个session就是一个hashmap阿
5分
连接池,对象的释放,程序是否有死锁……
5分
没个学生至少对应一个session,否则考试系统怎么跟踪
5分
应该是对象释放的问题,特别是数据库连接。如果使用连接池,看看最大连接数是否设置过低
5分
帮顶
5分
UP
5分
应该是数据库连接池的问题,连接池释放是不是及时?
<property name=”connection.provider_class”>net.sf.hibernate.connection.DBCPConnectionProvider</property> 
<property name=”dbcp.maxActive”>100</property> 
<property name=”dbcp.whenExhaustedAction”>1</property> 
<property name=”dbcp.maxWait”>120000</property> 
<property name=”dbcp.maxIdle”>10</property> 
<property name=”dbcp.ps.maxActive”>100</property> 
<property name=”dbcp.ps.whenExhaustedAction”>1</property> 
<property name=”dbcp.ps.maxWait”>120000</property> 
<property name=”dbcp.ps.maxIdle”>100</property>

我加上了连接池,但是报错,错误信息是:ORA-01000: 超出打开游标的最大数

我的程序是
public Question getQuestion(String tableName, long id) throws HibernateException{
this.initSession();  //代开session
Question ques=null;
String queryStr=”from com.cbit_cn.exam.dao.”+tableName+” as question where question.id=”””+id+””””;
Query query = this.session.createQuery(queryStr);
List it = query.list();
if(it.size()!=0){
ques=(Question)it.get(0);
}
System.out.println(“size of it size “+it.size());
this.closeSession();  //关闭session
return ques;
}

我将上面这个方法循环执行100遍就会报错,好像是session释放不掉,为什么呢?

释放session的代码是:
public static final ThreadLocal DBsession = new ThreadLocal();
public static void closeSession() throws HibernateException {
Session s = (Session) DBsession.get();
DBsession.set(null);
if (s != null)
s.close();
}

关注ing

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明tomcat4带40个客户机以后就经常出问题,怎么解决?高手指点!
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!