考试系统压力测试?

wey580231 2013-04-16 12:11:46
最近在做一个考试系统,要求至少满足200人同时访问。以前学习的时候,没有考虑到这样的问题。我担心自己的系统会崩溃,请问大家有啥好的建议吗?访问数据库时,使用的是DBCP连接池,感觉配的不怎么好,能给个配置的详细案例吗?
...全文
314 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
peihexian 2013-04-17
  • 打赏
  • 举报
回复
200个并发单台pc机的tomcat都能轻松应付的,楼主放心好了,单台linux+tomcat 1000以上并发的飘过。。。
wey580231 2013-04-17
  • 打赏
  • 举报
回复
引用 11 楼 peihexian 的回复:
200个并发单台pc机的tomcat都能轻松应付的,楼主放心好了,单台linux+tomcat 1000以上并发的飘过。。。
嗯,谢谢啦,因为没搞过这么大的,心里底气不足。有对于tomcat有啥特殊的配置吗?
xiaof0535 2013-04-16
  • 打赏
  • 举报
回复
去年搞过一个考试系统(现在还在持续更新),实际应用环境人数最多的时候大概是120人左右。我用的是JDBC连接池(JBOSS),就是最原始的那种,运行的时候也没有什么问题。主要就是要注意连接的及时释放,用完了一定要还回去。DBCP这个没用过,不好说什么,其实200人一点都不多的,不必担心。 你可以写一个多线程程序,同时模拟一万个用户登陆,然后你再自己登陆上去做套题试试,祝好运。
失落夏天 2013-04-16
  • 打赏
  • 举报
回复
200人应该不会崩溃。 一般的电脑还是能接受的。 还是测试下吧,真遇到崩溃的现象的售后再找相应的解决对策
wey580231 2013-04-16
  • 打赏
  • 举报
回复
引用 9 楼 xiaof0535 的回复:
你的思路是正确的,这样做完全可以。不过既然已经将试卷信息放到内存里,那又何必再做个数组呢?我的意思是在登陆时将试卷信息读出然后传递到展示试卷的页面,用户在这里答题(这只是个人建议)。session里放的东西越少越好。当然,你这样做也是可以的,session里就多了数组,不至于把系统干掉。 这里提个小建议,就是用户在答题后,一定要每答一道题就将答题的记录写到数据表里,不要……
嗯,我倒没有考虑到停电等突发情况,没有将答案保存到直接保存到数据库之中。因为一套试卷对于不同的学生来说,题目的排序是随机的,我只好对每个学生产生一个随机数的数组。然后保存在与对象之中。等交卷的时候,直接在服务器端处理答案,将分数保存在数据库之中。我会把这些过程做的更加的健全。
xiaof0535 2013-04-16
  • 打赏
  • 举报
回复
你的思路是正确的,这样做完全可以。不过既然已经将试卷信息放到内存里,那又何必再做个数组呢?我的意思是在登陆时将试卷信息读出然后传递到展示试卷的页面,用户在这里答题(这只是个人建议)。session里放的东西越少越好。当然,你这样做也是可以的,session里就多了数组,不至于把系统干掉。 这里提个小建议,就是用户在答题后,一定要每答一道题就将答题的记录写到数据表里,不要将答题记录放到内存里待交卷时一次性提交。因为如果不记录的话考试过程中一旦断电、死机或者交卷时出现各种故障,那么答题记录就全没了,用户只能重考。那么系统的用户体验就会大大降底(这也是我亲身经历的,实际使用的过程中这种情况发生过)。 其实你不要怕与数据库的连接过于频繁,尽量减少连接次数的想法是正确的,但也不要挢枉过正。只要及时的关闭conn,rs,ps其实一点问题也没有。如果你用了框架什么的,那就更不必担心了,框架会帮你处理这些。
wey580231 2013-04-16
  • 打赏
  • 举报
回复
引用 7 楼 xiaof0535 的回复:
其实不用多线程也可以,我当时测试的时候就是写一个小程序,模拟用户登陆,其实就是读取网络流的方式(大概像这样:readStream("http://127.0.0.1/login.app?user=test&pass=test","GET")),然后循环了10000次,这样就创建了一10000个会话。用户登陆时除把一些基本信息放到session以外还读取每个用户的卷……
嗯,我来试一试。我是这样做的,当第一个用户开始考试的时候,将试卷一次性的读出来。然后放在servletContext之中,比如选择题60道。然后,对每个学生产生一组数字的数组,将它保存在session之中,只要将数组之中的对应的题目分页取出来即可。觉得这样不用每次都去读取数据库,你觉得这样行不?
xiaof0535 2013-04-16
  • 打赏
  • 举报
回复
其实不用多线程也可以,我当时测试的时候就是写一个小程序,模拟用户登陆,其实就是读取网络流的方式(大概像这样:readStream("http://127.0.0.1/login.app?user=test&pass=test","GET")),然后循环了10000次,这样就创建了一10000个会话。用户登陆时除把一些基本信息放到session以外还读取每个用户的卷子,其实就是一个list包装的map。当执行完毕以后,我再登陆一个用户上去做题。 当然,还可以再极端一些测试,比如这样:遍历这10000个session(session里有用户ID),然后将答题记录写到数据表里,以一个session为单位(一个独立的线程),写100次。不过这需要用到多线程,其实这个多线程也不复杂,上网一搜就有,不麻烦的。 主要就是要注意数据库连接,用完一定释放,再就是千万别拼字符串,呵呵。
wey580231 2013-04-16
  • 打赏
  • 举报
回复
引用 2 楼 xiaof0535 的回复:
去年搞过一个考试系统(现在还在持续更新),实际应用环境人数最多的时候大概是120人左右。我用的是JDBC连接池(JBOSS),就是最原始的那种,运行的时候也没有什么问题。主要就是要注意连接的及时释放,用完了一定要还回去。DBCP这个没用过,不好说什么,其实200人一点都不多的,不必担心。 你可以写一个多线程程序,同时模拟一万个用户登陆,然后你再自己登陆上去做套题试试,祝好运。
以前都是在自己的电脑上,就打开几个浏览器窗口。有一次在使用AJAX异步验证是用户名是否存在的时候,故意平凡的验证,没想到十几次之后就不能连接了。那时候就留下了阴影,而且多线程是我的软肋。能否指点一下,谢谢啦!
  • 打赏
  • 举报
回复
崩溃大致就是内存溢出、连接阻塞等等,建议你容器上配个连接池或者自建个连接池控制在200
长笛党希望 2013-04-16
  • 打赏
  • 举报
回复
200个用户不会造成问题。注意管理好数据连接就可以。楼主写个多线程模拟一下。。。
tianma630 2013-04-16
  • 打赏
  • 举报
回复
用户上万了灾区考虑压力 当然如果你程序有问题 1个用户也是会崩溃的 有个测试软件 可以压力测试 loadrunner

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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