使用Wicket开发网站出现内存溢出的讨论

本来是在新闻里的,不过觉得那里不合适讨论这种问题,所以另外开了一个新的帖子

[b]greateWei说[/b]
wicket确实不错,基本上和桌面开发思想类似,一些常用的控件如Label、Tabbed Panel、Text、DateTime、Tree、Grid等上手使用非常方便,你可以做公用的panel,tree等,然后在多个页面中使用。

另外一个就是ajax支持对开发使用人员基本上是透明的,封装做的相当不错。

我觉得一般来说,wicket适合用于开发交互性比较强,用户操作比较复杂的应用管理类web应用,对于一般大流量、浏览性web网站不一定适合,主要原因wicket所有的状态采用session机制来保存管理,每个页面的状态也是保存在服务器端,这样一旦用户访问人数非常多的话,对服务器端压力非常大,特别是内存要求很高。

之前做了一个简单的外卖订餐网站(http://www.517wm.com),发现并发访问人数超过1500人左右时,经常性会发生内存溢出(tomcat 分配了 1G 内存,计算机内存是5G,使用普通PC机做服务器),要解决这个问题,估计只有通过tomcat集群或者一些其他jvm内存集群方案才能解决。


[b]wl95421说[/b]
Wicket的性能并不差,给大家做个简单的分析,一般的页面,如果是用LoadModel,大概序列化后只占5-10K,每个Session中默认是放置5个页面,假设再开大一些,放置10页,也就是说对于每个Session来说,Wicket只占用100K左右的内存。

对于1500人的访问,即1500X100K,那么只占用150M内存,这个占用绝对不算大。
只不过对于大部分人来说,并不习惯使用LoadModel,所以将Model也Cache在Session中了,如果是列表数据,自然就大了很多,比如说一个25条数据的列表页面,序列化后肯定不是10K,至少也是个40K,搞不好100K,就算默认是5个页面,也要占用500K内存,1500个上来,就是750M,肯定完蛋。

所以如果出现这种情况,应该看LoadModel,而不是默认的Model。
另外如果情况不严重,可以考虑使用DiskSessionStore,性能也还不错。
再加一句,并不是所有的东西都需要放到Session中
多用一下StatelessForm,会发现对于互联网来说,这种更合适。

[b]greateWei[/b]说
to wl95421
去年年底也是看了你写的wicket用户手册入门的,之前还不了解wicket是干什么用呢,

之前确实没有使用LoadModel模式,主要是编码工作量问题吧,网站上线试用了一段时间后,随着资料增加和访问人数增加,内存溢出越来越频繁,后来基本上设计到大数据量列表的全部使用了LoadModel模式,不过内存问题还是存在的。

有几次,网站中一些搜索引擎爬虫收录时,并发数上去后,偶尔还是会发生内存溢出问题,我查看了硬盘中的session文件,发现大小基本上在300k左右,应该属于正常范围。

解决办法倒不是没有:
1.增加内存容量;不过tomcat在windows下似乎最大只能分配1G内存,linux应该没这个限制;
2.Terracotta也是一个选项;
3.session序列化机制改良,曾有人提出使用mem cache来实现;我现在使用的是默认session保存机制;

使用wicket一段时间,总的印象还是不错的。

原先主要做桌面应用软件开发的,发现切换到web开发挺自然的。ajax开发应用实在是方便,struts2虽然也有,当时看了基本上放弃使用struts2,主要是本人之前没有ajax开发调试经验;web部分代码重用非常方便,使用panel可以为你节省很多重复代码。

如果使用java开发web应用管理类网站,有频繁交互,需要有良好的用户体验,我觉得wicket、tapestry、GWT三个框架是首选,三个框架都有异曲同工之妙。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值