前段时间用asp.net开发了一套在线考试系统,发布到win2003上,数据库是sql server2000,现在如果大量用户(比如50人以上)同时读取试卷,或同时交卷,就会出错或导致服务器挂掉(出错信息没有记录下来,我也没办法帖出来,因为条件不允许,不能再做同样的真实测试,但问题只是在多用户同时请求服务器的时候才出现的),但是如果用户比较少(比如10人以下)就不会出现问题,这种情况应该如何应对呢?是因为程序处理上的问题还是哪里设置有问题呢?
    我简略说一下程序读取试卷的过程:
        1.用ajax向一个aspx页面请求获取试题(每次获取一般不超过30道题,因为是怕数据量大,所以按题型取的,比如点击打开填空,那就取20道填空题);
        2.服务页面根据请求参数,调用取题的存储过程(根据试卷设定的规则随机抽题)返回试题ID列表;
       3.服务页面得到抽取的试题的ID列表后,循环读取试题信息,并生成HTML代码(<table>...</table>),返回给前台;
       4.前台页面显示返回的HTML代码,取题的过程就完成了。
    交卷过程:
        用ajax真接提交给一个web service来处理的。
我使用.net提供的测试工程做了压力测试,10000用户量都没有出现问题,我还在不知该如何再去解决这个问题,还有就是做过这方面程序的大侠们对于这样的程序有什么需要注意的地方,希不吝赐教,小子这里谢过了!我也没有多少可用分,只要能解决这个问题,我都出了~~~~

解决方案 »

  1.   

    服务页面得到抽取的试题的ID列表后,循环读取试题信息,并生成HTML代码( <table>... </table>),返回给前台; 
    ====
    这里对数据库操作的时间长否?
      

  2.   

    谢谢各位的关注!
    您好,js错开时间段方式我是否可以这样理解:比如我在提取数据或交卷前先随机产生一个0~5秒的Sleep时间,然后再读取或交卷?如果不采用这样的方式,一般情况下IIS不能承受50用户每用户约5K数据的同时请求么?
      

  3.   

    服务器配置:cpu 3.0G,内存:2G
      

  4.   


    您好,我是第一次使用它的测试工具,对其原理不太清楚,以前我一直是写VC的,呵呵,我的测试过程是这样的,新建一个测试工程,然后录制web页面(因为这个录制好像抓不到ajax请求,所以我把ajax部分直接写到了页面上,这里测试时没有用ajax 读取),增加压力测试用户量10000,持续运行10分钟,运行过程中测试程序没有告诉我出现错误。
      

  5.   


    哦对了,我的前台页面以及web service中都用了session存储了一个我的试卷对象(我将试卷,试题,答案都存储在一个类中),整个读取和交卷过程都是先存入Session,交卷时是用ajax提交,存入session然后生成sql语句进入数据库,跟这个有关系不?
    嗯,对于代码错误的可能性不大,因为用户量少的时候没有出过错的,我想有问题也只有可能是代码的组织上可能不能满足大用户量的请求,程序是如何写的,我前面已经大概描述过了,大家能看出什么问题么?
      

  6.   


    我原来做的那套系统和你的系统可能实现的方式不一样:采用在考试前生成试卷(即生成静态页面)的方式,每套试卷的交卷时间已经写到页面上了,用js中的时间函数控制,每隔几秒提交一批到数据库(交卷是系统自动交卷,页面上是显示同时交卷的,但内部每批试卷之间采用settimeout函数延时了几秒再入库),这样可以错开同时提交数据对服务器的压力.