花了一点时间,测试了一下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
- 浏览 2591
- 评论(4)
- 论坛回复 / 浏览 (4 / 4457)
- 查看更多
相关推荐
虽然文档中没有给出具体的网络拓扑图,但根据文档描述,可以想象出一个简单的网络结构:一台或多台Tomcat服务器与一台Apache服务器连接,形成负载均衡架构。其中,Apache作为前端代理服务器,负责接收客户端请求并将...
综上所述,跨域实现用户鉴权涉及到Web开发的多个方面,包括CORS、cookie、session、JWT等技术,以及对后端服务如Tomcat的配置。开发者需要理解这些概念并灵活运用,以确保在保障安全性的同时提供良好的用户体验。...
Servlet 应用程序通常包括以下几个部分: - **Servlet 容器:**例如 Tomcat,用于加载和管理 Servlet。 - **Servlet:**处理 HTTP 请求的核心组件。 - **Web.xml:**配置文件,定义 Servlet 映射和其他配置信息。 *...
在JSP中,主要涉及以下几个关键概念: 1. **JSP页面结构**:一个JSP页面由HTML、XML或其他标记语言构成,其中可以嵌入Java代码或JSP指令。JSP标签分为元素(Elements)、指令(Directives)和脚本元素(Scripting ...
- *Web Development with JavaServer Pages, Second Edition* - 介绍JSP开发的全面指南。 - *Advanced JavaServer Pages* - 针对高级JSP开发者的深度指导。 - *Struts in Action* - 专注于Struts框架的应用。 - ...
在处理**常见问题**时,有几个关键点需要注意: 1. **配置问题**:确保JSP环境已经正确配置,包括JDK、Tomcat服务器以及数据库驱动的安装和配置。 2. **语法错误**:检查JSP页面中的Java代码是否存在语法错误,如...
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 ...
- 或使用WITH子句配合RANK()函数实现更复杂的分页逻辑。 ##### Oracle的基本数据类型 - **NUMBER**:数值类型。 - **VARCHAR2**:可变长度字符串。 - **DATE**:日期类型。 - **TIMESTAMP**:精确到毫秒的时间戳。...
With Struts this is done with an Action class as a thin wrapper to the actual business logic. • Model state The model represents the state of the application. The business objects update the ...
但一般来说,配置Hibernate需要完成以下几个步骤: 1. **配置Hibernate核心文件(hibernate.cfg.xml)**:设置数据库连接参数、方言等。 2. **编写实体类**:定义数据模型。 3. **创建SessionFactory**:用于获取...
Jetty相较于其他Web容器(如Tomcat)有以下几个显著特点: - **轻量级**: 占用资源少,启动速度快。 - **模块化**: 组件之间解耦合,可根据需要选择使用哪些模块。 - **灵活性**: 易于定制和扩展,适合不同的应用...
Jetty采用了模块化的架构设计,主要包括以下几个核心组件: - **Connector**:负责监听网络连接并接收客户端请求。 - **Handler**:处理请求并生成响应。 - **Server**:整体管理Jetty服务器的生命周期。 - **...