花了一点时间,测试了一下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 14:26
- 浏览 2560
- 评论(4)
- 论坛回复 / 浏览 (4 / 4432)
- 查看更多
相关推荐
tomcat修改sessionId,同一台服务器部署多个tomcat需要修改sessionId,否则会出现session冲突的问题
设定tomcat中session过期时间的三种方式
基于 Redis 的Tomcat Session共享。 对Git项目tomcat-redis-session-manager 做了简单修改。 使用方法,可以参考博客: http://blog.csdn.net/catoop/article/details/48603891
(附件2个tomcat和测试demo) 测试demo在apache-tomcat-6.0.35目录下logintest。 配置好jdk环境变量,把2个tomcat解压到D盘根目录后,即可分别启动tomcat。 访问http://localhost:9998/index.jsp登录后, 再访问...
一直以来,我误解认为启动了n个tomcat,则Session需要同步复制到n个Tomcat中存在,因此在启动了6个以上的Tomcat,性能会大大下降。 而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session...
tomcat5 session 复制
多个服务器部署Tomcat共享Session的方法,自己亲身测试
在网上找了好久,终于找到了可用的资源,本人亲自测试,绝对tomcat7下可用。
Tomcat8 我已经配置好了jar包,实现多Tomcatsession同步。
tomcat session存到mencache,版本为1.8,欢迎使用,交流。
tomcat 集群 nginx 使用redis 保证session同步
apache-tomcat-7.0.56+nginx-1.8.0+redis-3.0.6集群部署所需JAR包,session共享 tomcat-redis-session-manager1.2.jar jedis-2.6.2.jar tomcat-juli.jar tomcat-juli-adapters.jar commons-pool-1.5.4.jar commons...
Tomcat_Session的持久化,详细讲解tomcatsession管理的原理和持久化原理
linux.tomcat-session共享.redis.安装包
使用说明:请严格按照资源内的readme文档来说明部署,不要搞错版本,完美支持Tomcat8和Tomcat9等新版本Tomcat,仅支持JDK8以上版本JDK。
tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制...
-- tomcat-redis-session共享配置 --> <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions....
使用SpringSession管理多台tomcat的session同步到redis上
linux-tomcat+nginx解决session共享,linux-tomcat+nginx解决session共享,linux-tomcat+nginx解决session共享,
压缩文件包括tomcat-redis-session-manager-master-2.0.0.jar、jedis-2.7.3.jar、commons-pool2-2.3.jar三个jar包使用方法请参照https://github.com/jcoleman/tomcat-redis-session-manager。apache-tomcat-8.5.33....