|
|
|
对于一个比较大型的项目采用Struts是否可取? 首先 1.actionservlet,如果使用Struts自身提供的Actionservlet的话, 是多个模块共用一个呢,还是对于不同的模块只是配置文件不同(moduleConfig)使用同一个ActionServlet呢?如果是对于不同的ActionServlet之间好像没有办法跳转.同一个ActionServlet会不 会造成瓶颈?(大量的访问堆积在ActionServlet层面,即使系统生 成了很多实例也恐怕不能够满足并发量400以上的访问?) 2.FormBean,FormBean的传递通常是通过request或者Session或者 context来进行的,这三种事实上都是存放一个映射关系,然后取出 来,都会涉及到对象的类型转换.这种转换在大量的并发操作下,会 造成资源的开销很大(从cpu和内存上面可以看得出来这种消耗,很 多内存不能及时回收..造成服务器的内存占用率斜线上升) 3.Action类的不灵活性.使用Action的时候如果不使用DispatchAction 的话,只能对应一个动作(submit)就需要一个Action类来对应处 理,这样子对于开发来说简直是一种灾难,拥有无数的只有一个 方法的类?同样的事情发生在FormBean上面.对于FormBean的DynaValidatorForm并不能真正解决问题,因为类型转换仍然频 繁发生. 4.严格按照Struts的规范而言是不是意味着两个jsp之间的所有通信(不包 括纯链接,带参数的在此范围内)都是通过ActionServlet和Action来发生 的?如果是的话,又会无端多出很多ForwardAction,虽然不需要手写,对于 ActionServlet来说压力又增加了,性能问题越发明显.
当然,以上只是一些个人意见,可能很多地方没有考虑得很清楚,希望大家一 起讨论讨论?
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月04日 23:50
|
|
|
如果项目规模不超过中国人均GDP最高的特区的OSS系统,那Struts不会有问题
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月05日 13:11
|
|
|
> 对于一个比较大型的项目采用Struts是否可取? > 首先 > 1.actionservlet,如果使用Struts自身提供的Actionservlet?> 话, > 是多个模块共用一个呢,还是对于不同的模块只是配置文件不?> (moduleConfig)使用同一个ActionServlet呢?如果是对于不同 > ActionServlet之间好像没有办法跳转.同一个ActionServlet > 岵?> 会造成瓶颈?(大量的访问堆积在ActionServlet层面,即使系统 > ?> 成了很多实例也恐怕不能够满足并发量400以上的访问?) 很奇怪,你会说电脑就一个cpu造成瓶颈吗
> 2.FormBean,FormBean的传递通常是通过request或者Session?> 者 > context来进行的,这三种事实上都是存放一个映射关系,然后?> 出 > 来,都会涉及到对象的类型转换.这种转换在大量的并发操作下 > 会 > 造成资源的开销很大(从cpu和内存上面可以看得出来这种消耗 > 很 > 多内存不能及时回收..造成服务器的内存占用率斜线上升) FormBean总在服务器端,不需要传递啊
> 3.Action类的不灵活性.使用Action的时候如果不使用Dispatc > Action > 的话,只能对应一个动作(submit)就需要一个Action类来对应?> > 理,这样子对于开发来说简直是一种灾难,拥有无数的只有一个 > > 方法的类?同样的事情发生在FormBean上面.对于FormBean的Dy > aValidatorForm并不能真正解决问题,因为类型转换仍然频 > 繁发生. 对于每个请求Action和FormBen都是可选的
> 4.严格按照Struts的规范而言是不是意味着两个jsp之间的所?> 通信(不包 > 括纯链接,带参数的在此范围内)都是通过ActionServlet和Act > on来发生 > 的?如果是的话,又会无端多出很多ForwardAction,虽然不需要 > 中?对于 > ActionServlet来说压力又增加了,性能问题越发明显. 不用担心ActionServlet > > 当然,以上只是一些个人意见,可能很多地方没有考虑得很清楚 > 希望大家一 > 起讨论讨论?
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月05日 13:39
|
|
|
关于3:就算有dispatch actionservlet也不能从根本上解决问题,一个submit往往就是一种特定的操作和需求,必须有对应的code来处理,至于要写成action class这是没有办法的,framework这玩意就这样。
“大量的访问堆积在ActionServlet层面,即使系统生成了很多实例也恐怕不能够满足并发量400以上的访问?” ??? 如果不能handle,那也不是actionservlet的问题,可能是cpu资源不够,其它关于性能的问题也是有一定道理的,framework往往把一个系统分割为多个“独立”的模块,相对于搞在一起性能上肯定是有牺牲的,但是不要忘了,老外的经典教条:速度不够用硬件弥补。
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月05日 17:53
|
|
|
问题1: 一般是用同一个ActionServlet,当然你想用/abc/*.do对应ActionServlet1,/def/*.do对应ActionServlet2也可以
但是就算只用一个ActionServlet,但并不是说,Web服务器就只有一个线程在处量所有的请求,类和实例是不同的.
问题2: 关于大量的类型转换,类型转换是要一点时间,但那相对于业务的处理所要的时间来说可以计为零.而且,这里并没有大量的转换,无非,在由Form进Action的execute中,多了一次而已.
问题3: >使用Action的时候如果不使用DispatchAction的话,.. 那你就使用它就是了.
问题4: >每个Action都会有ActionForward 这很正常啊,用户提交了他想要的操作,一般情况下,当然要给用户一个操作结果,JSP就是显示结果的地方,所以要Forward. (当然Forward不一定只能到jsp)
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月05日 20:56
|
|
|
1.对于只使用一个Servlet来统管,我不知道这种方式同使用不同的 servlet来做分流控制之间的主要差别在于什么?如果同样使用多线程 池的话应该没有太大区别,会无限创建实例吗?(如果没有空闲?) 2.对于不停的进行对象类型转换这种操作,少量的访问或者并发量不是 非常大的情况下可能还能够忍受,但是内存仍然会缓慢上扬.我在weblogic 下面做个比较详细的性能测试,在并发量50个的情况下10分钟就差不多 weblogic的内存上涨了200M左右(在这之后自动内存回收可以减少一些) 对于这种现象,我有理由对项目表示担心... 3.开发效率而言,让程序员不停的做基本类似的Action的类,总觉得是 一种很没有效率而且容易让程序员疲劳犯错的事情.即使采用了 DispatchAction依然存在繁琐的配置过程,如果在项目进度比较紧张的 情况下出现一个错误就足以影响整个进度....:P
只是对项目进度有些担心.同时我想请教请教各位大虾; 如果我对项目不是很有把握,而且团队组建还不是很久,对每个人的编码实 力都还不是很了解的情况下,使用Struts来规范团队的开发(可能还有很大 一部分人对Struts不是非常熟悉),这样能够减少项目风险吗?或者会更加 增加项目风险?
此外,有没有道友做过Struts的性能评测,就是比较正式严格的测试,不只是 象俺跑了10分钟的.用数据说话可能是最能够让人放心而且明确的方法.
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月05日 20:58
|
|
|
对于一个并发量(同时访问数据库,或者说同时去点击一个按钮)在400 的情况下,兄台以为如何?(并发量一般同在线人数为1:10的关系)
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月05日 21:35
|
|
|
问题1: 一般情况下就用一个ActionServlet,总控还是只有一个最好. 实例的多少由Web容器的调度策略来决定. 线程不会无限多下去,到了Web容器的极限的情形是:客户端到来的请求,Web容器不处理.
问题2: 内存上扬是正常现象,但这不是说用Struts才这样. 事实上从请求到ActionServlet开始记时,经过ActionForm转到excute方法,一般不会超过0.01s,(注:我开发机器用的是p4 1.5g ,600M内存,在wsal调试环境下.)
问题3: 用jbuilder 9做开发
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月06日 00:13
|
|
|
> 1.对于只使用一个Servlet来统管,我不知道这种方式同使用不 只有一个Servlet能够更好的进行控制和统计,而减少同步操作,或者线程冲突 > 2.对于不停的进行对象类型转换这种操作,少量的访问或者并?> 量不是 我们做测试的时候,wls开800M内存,5分钟就满,就会自动gc gc完了以后,只有80M 关于内存大小,还是你自己写的代码是否干净的问题 干净的代码,自然有办法用更好的机器来gc,不干净的代码,再好也没用 > 3.开发效率而言,让程序员不停的做基本类似的Action的类,总 这个是项目自己的问题,和Struts没关系,如果你没用Struts,然后每人自己来写mvc,更加是一地错误 > > 只是对项目进度有些担心.同时我想请教请教各位大虾; > 如果我对项目不是很有把握,而且团队组建还不是很久,对每个 你是项目负责人,你应该自己足够清楚你的项目使用的技术结构 如果你不够清楚或者不够指导人,那就只有祈祷你的同事的技术水平 比如说,最基础的,你能控制好每个人机器上的开发运行环境都一样嘛? > > 此外,有没有道友做过Struts的性能评测,就是比较正式严格的 好像我已经回过了,不想再回了 想起一个基本原则:dupliation is terrible,嗯,灌水同样适用~
>对于一个并发量(同时访问数据库,或者说同时去点击一个按钮)在400 >的情况下,兄台以为如何?(并发量一般同在线人数为1:10的关系) 这倒可以答得出来,我们系统记录到得最大并发操作是300多,双机跑的,那对数据库来说应该有500多吧
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2003年12月27日 10:49
|
|
|
|
小弟我用Robot+TestManager(rational的产品)测过我公司开发的商用系统(struts)(用的是发布版本)。具体数据记不清了。有一个统计用户使用频率的查询模块当并发超过400user时就当机了(当了Robot)
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2004年06月11日 10:57
|
|
|
|
|
|
|
|
|
Re: 关于Struts的性能怀疑
|
2004年06月13日 15:57
|
|
|
|
|
|
|