浏览 4456 次
精华帖 (10) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-26
最后修改:2009-02-26
测试环境: 运行在我的T60上的Virtualbox linux, ubuntu server 8.10,安装在独立硬盘分区上。jdk是sun 的1.6.0.10.用 ab来测试。只比较每秒执行的url请求这一项。 session.jsp是一个很简单的文件: <% session.setAttribute("name",System.currentTimeMillis()+""); %> <%= session.getId()%> <br> <%= session.getCreationTime()%> <% session.invalidate();%> nosession.jsp更简单: <%=5%> jetty 6.1.14 thread pool = 200 -n 5000 -c 500 session.jsp , 460/s -n 5000 -c 500 nosession.jsp , 480/s -n 5000 -c 2000 session.jsp , 450/s,约1/3几率无法完成 (connection reset by server) -n 5000 -c 2000 nosession.jsp , 450/s,约1/3几率无法完成 作为对照,先搞了个jdbcSessionManager进来: jetty 6.1.14 with jdbcSessionManager( take from 7.0.0 pre 5) -n 5000 -c 50 session.jsp , 28/s -c超过50都无法完成。 仔细一看代码,里面去进行jdbc session save的代码居然是同步的….简直是无语….本来就是拿来做对比的,所以也没有去折腾改写代码。 tomcat 6.0.18 thread pool = 150(设为200没有明显变化) -n 5000 -c 500 session.jsp , 680/s -n 5000 -c 500 nosession.jsp , 680/s -n 5000 -c 2000 session.jsp , 614/s 超过半数几率无法完成 -n 5000 -c 2000 nosession.jsp , 618/s 超过半数几率无法完成 试一下laoer(http://www.iteye.com/topic/82565)的代码。首先,不支持session.invalidate是个很大的问题。再看一下效率: tomcat 6.0.18 with laoer's memcached session filter, ( whalm memcached client v2.0.1), sockIOPool max size = 250 -n 5000 -c 250 session.jsp , 108/s (max) -n 5000 -c 250 nosession.jsp , 146/s (max) -n 5000 -c 500 session.jsp , 无法完成 -n 5000 -c 500 nosession.jsp , 无法完成 问题可能是出在filter的效率上。没有认真分析。 再试一下codeutil(http://www.iteye.com/topic/81641)的代码。因为是直接替换掉defaultSessionManager,效率是有保证的。 tomcat 6.0.18 with codeutil's memcached session manager( whalm memcached client v2.0.1) ,sockIOPool max size = 250 -n 5000 -c 250 session.jsp , 570/s -n 5000 -c 500 session.jsp , 577/s -n 5000 -c 500 nosession.jsp , 575/s -n 5000 -c 250 nosession.jsp , 568/s 可以看到memcached调用产生了一些拖累。效率降低在17%左右。 好吧,换用一下spymemecached。 tomcat 6.0.18 with codeutil's memcached session manager( spy memcached client 2.2 ) -n 5000 -c 250 session.jsp , 367/s -n 5000 -c 500 session.jsp , 360/s -n 5000 -c 500 nosession.jsp , 429/s -n 5000 -c 250 nosession.jsp , 430/s 结果居然更慢了….奇怪ing … 时间所现,未仔细分析各方面的问题产生的原因。以上测试每个都是重启tomcat/jetty,每隔10秒运行因此,运行5次,取后三次的平均。仅供参考。 当然,web 2.0网站使用的时候,最好是不用session。也就是说直接在cookie里面放userid。真的当用户要进行敏感操作的时候再来用session。memcached未必适合这种存储session的操作,因为memcached本身会成为单点。但是别忘了还有一大陀的其他东东,比如memcachedb和TT(tokyo tryant)都是可以用memcached protocol的呀….而tokyo tryant是可以复制的,也会永久存储…. invalidate的部分,为了避免多个tomcat自己计时的问题,可以设置把时间戳记到TT里面,然后用lua去进行invalidate 。 看了几个关于session with memcached的帖子,说的最好的是acdc.(http://www.iteye.com/topic/135066) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-26
同意能不用Session时最好不要用Session,可以尝试memcachedb和TT(tokyo tryant)。
|
|
返回顶楼 | |
发表时间:2009-02-27
session 就是体现在http header一对key,value ,cookie也类似.
自己去实现设置header的key,value就是很容易实现session管理。 |
|
返回顶楼 | |
发表时间:2009-02-28
最后修改:2009-02-28
你可以参考一下Rails基于Cookie的Session机制,很好用,而且很方便。它本身也是做加密处理的,所以存放user id还是比较安全的。服务器端没有必要保存用户状态了,memcached就是一个纯粹的CacheServer,从session里面取得user id,然后从memcached里面找user,我们现在就是这样做的。
实际上,除了user id,session里面没有必要,也不应该存放任何其它东西。 |
|
返回顶楼 | |
发表时间:2009-03-01
theone 写道 实际上,除了user id,session里面没有必要,也不应该存放任何其它东西。
不要一棒打死,根据实际情况衡量 :)微笑,继续微笑 |
|
返回顶楼 | |