论坛首页 Java企业应用论坛

tomcat session with tomcat的几个测试

浏览 4432 次
精华帖 (10) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-26   最后修改:2009-02-26
花了一点时间,测试了一下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)

   发表时间:2009-02-26  
同意能不用Session时最好不要用Session,可以尝试memcachedb和TT(tokyo tryant)。
0 请登录后投票
   发表时间:2009-02-27  
session 就是体现在http header一对key,value ,cookie也类似.

自己去实现设置header的key,value就是很容易实现session管理。
0 请登录后投票
   发表时间:2009-02-28   最后修改:2009-02-28
你可以参考一下Rails基于Cookie的Session机制,很好用,而且很方便。它本身也是做加密处理的,所以存放user id还是比较安全的。服务器端没有必要保存用户状态了,memcached就是一个纯粹的CacheServer,从session里面取得user id,然后从memcached里面找user,我们现在就是这样做的。

实际上,除了user id,session里面没有必要,也不应该存放任何其它东西。
0 请登录后投票
   发表时间:2009-03-01  
theone 写道
实际上,除了user id,session里面没有必要,也不应该存放任何其它东西。

不要一棒打死,根据实际情况衡量
:)微笑,继续微笑
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics