tomcat session with tomcat的几个测试

花了一点时间,测试了一下jetty/tomcat对session持久化的一些做法。

测试环境: 运行在我的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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值