高分请教:关于同时大用户量提交数据导致服务器挂掉或返回错误的问题

raul_qu 2008-05-09 01:47:36
前段时间用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用户量都没有出现问题,我还在不知该如何再去解决这个问题,还有就是做过这方面程序的大侠们对于这样的程序有什么需要注意的地方,希不吝赐教,小子这里谢过了!

我也没有多少可用分,只要能解决这个问题,我都出了~~~~
...全文
235 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
raul_qu 2008-05-29
  • 打赏
  • 举报
回复
还是没有解决饿。。。。。。
还有牛人有好的解决方案么?
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wangkun9999 的回复:]
引用 10 楼 raul_qu 的回复:
谢谢各位的关注!

引用 4 楼 wangkun9999 的回复:
1.一般高并发性的系统采用消息队列和多线程(在保证不挂服务器的情况下最大利用服务器资源);
2.另外可以考虑js错开时间断的方式读取和写入数据库(我原来做过三千人在线考试系统,交卷那一下采用分批方式提交数据库)


您好,js错开时间段方式我是否可以这样理解:比如我在提取数据或交卷前先随机产生一个0~5秒的Sleep时间,然后再…
[/Quote]


那就是说你在后台管理的时候就已经为每个人生成了试卷对吧?
上山打老虎2 2008-05-09
  • 打赏
  • 举报
回复
再弄个类似测试项目放到网上去,大家测一下不就出来了
wangkun9999 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 raul_qu 的回复:]
谢谢各位的关注!

引用 4 楼 wangkun9999 的回复:
1.一般高并发性的系统采用消息队列和多线程(在保证不挂服务器的情况下最大利用服务器资源);
2.另外可以考虑js错开时间断的方式读取和写入数据库(我原来做过三千人在线考试系统,交卷那一下采用分批方式提交数据库)


您好,js错开时间段方式我是否可以这样理解:比如我在提取数据或交卷前先随机产生一个0~5秒的Sleep时间,然后再读取或交卷?如果不采用这样的方式,…
[/Quote]

我原来做的那套系统和你的系统可能实现的方式不一样:采用在考试前生成试卷(即生成静态页面)的方式,每套试卷的交卷时间已经写到页面上了,用js中的时间函数控制,每隔几秒提交一批到数据库(交卷是系统自动交卷,页面上是显示同时交卷的,但内部每批试卷之间采用settimeout函数延时了几秒再入库),这样可以错开同时提交数据对服务器的压力.
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]
你还是等到对出错信息做了记录之后再去解决吧。

以后,对出错信息进行记录是重点维护手段,应该在部署程序之前就写好关于如何记录错误信息的文档。
[/Quote]

回5楼的,主要现在没有这样的条件了,上次是给客户(部队的单位)培训的时候发现了这个问题,因为正在培训,然后出了问题,我只能想办法先糊弄他们了,没机会留下错误信息,也怪我自己没有把错误信息记录到日志,哎,现在没办法,没这样的环境再搞出这个错误了。
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yeness 的回复:]
代码有问题的可能性比较大,不至于50人的压力都承受不了
[/Quote]

哦对了,我的前台页面以及web service中都用了session存储了一个我的试卷对象(我将试卷,试题,答案都存储在一个类中),整个读取和交卷过程都是先存入Session,交卷时是用ajax提交,存入session然后生成sql语句进入数据库,跟这个有关系不?


嗯,对于代码错误的可能性不大,因为用户量少的时候没有出过错的,我想有问题也只有可能是代码的组织上可能不能满足大用户量的请求,程序是如何写的,我前面已经大概描述过了,大家能看出什么问题么?
小凤雏 2008-05-09
  • 打赏
  • 举报
回复
应该不可能出现此问题的,是不是你的代码有问题啊!
phper2008 2008-05-09
  • 打赏
  • 举报
回复
该用户发布的信息被斑竹删除!
xuan.ye 2008-05-09
  • 打赏
  • 举报
回复
代码有问题的可能性比较大,不至于50人的压力都承受不了
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 maco_wang 的回复:]
10000用户量都没有出现问题,强!
[/Quote]

您好,我是第一次使用它的测试工具,对其原理不太清楚,以前我一直是写VC的,呵呵,我的测试过程是这样的,新建一个测试工程,然后录制web页面(因为这个录制好像抓不到ajax请求,所以我把ajax部分直接写到了页面上,这里测试时没有用ajax 读取),增加压力测试用户量10000,持续运行10分钟,运行过程中测试程序没有告诉我出现错误。
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
服务器配置:cpu 3.0G,内存:2G
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
谢谢各位的关注!

[Quote=引用 4 楼 wangkun9999 的回复:]
1.一般高并发性的系统采用消息队列和多线程(在保证不挂服务器的情况下最大利用服务器资源);
2.另外可以考虑js错开时间断的方式读取和写入数据库(我原来做过三千人在线考试系统,交卷那一下采用分批方式提交数据库)
[/Quote]

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

叶子 2008-05-09
  • 打赏
  • 举报
回复
csdn服务器刚才卡了?
叶子 2008-05-09
  • 打赏
  • 举报
回复
10000用户量都没有出现问题,强!
叶子 2008-05-09
  • 打赏
  • 举报
回复
10000用户量都没有出现问题,强!
叶子 2008-05-09
  • 打赏
  • 举报
回复
10000用户量都没有出现问题,强!
  • 打赏
  • 举报
回复
你还是等到对出错信息做了记录之后再去解决吧。

以后,对出错信息进行记录是重点维护手段,应该在部署程序之前就写好关于如何记录错误信息的文档。
wangkun9999 2008-05-09
  • 打赏
  • 举报
回复
1.一般高并发性的系统采用消息队列和多线程(在保证不挂服务器的情况下最大利用服务器资源);
2.另外可以考虑js错开时间断的方式读取和写入数据库(我原来做过三千人在线考试系统,交卷那一下采用分批方式提交数据库)
LGame 2008-05-09
  • 打赏
  • 举报
回复
加大内存!!!
raul_qu 2008-05-09
  • 打赏
  • 举报
回复
我用查询分析器调用这个存储过程,第一次得1秒多的样子,后面就很快会得到不同的ID列表,不知用什么可以把这个存储过程调用的时长做出准确的判断呢?
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧