- 浏览: 146139 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
liuxiang00435057:
不知道,你有这个的实现不,能发给我参考下吗,liuxiang0 ...
RBAC模型的通用权限管理系统的设计(数据模型)的扩展 -
步青龙:
这个批量上传确定可以用吗?我这怎么不行呢,官方的Demo也不行 ...
KindEditor 4.1 发布,开源HTML编辑器
转载自 http://elf8848.iteye.com/blog/698217
你想建设一个能承受500万PV/每天的网站吗?
500万PV是什么概念?我的服务器每秒要处理多少个请求?
PV是什么?
PV是page view的简写。PV是指页面刷新的次数,每一次页面访问,就算做一次pv流量。
计算模型:
每台服务器每秒处理请求的数量=((80%*总PV量)/(24小时*60分*60秒*40%))/服务器数量
其中关键的参数是80%、40%。表示一天中有80%的请求发生在40%的时间内。24小时的40%是9.6小时,有80%的请求发生一天的9.6个小时当中(很适合互联网的应用)。
((80%*500万)/(24小时*60分*60秒*40%))/1 = 1157个请求/秒
((80%*100万)/(24小时*60分*60秒*40%))/1 = 231个请求/秒
结论:
现在我们在做压力测试时,就有了标准,如果你的服务器一秒能处理1157个请求,就可以承受500万PV/每天。这里不关心是请求的是静态的html,还是动态的jsp。
如果你的服务器一秒能处理231个请求,就可以承受100万PV/每天.
说明:这里说明每秒N个请求,更像是TPS。而不是请求一个html页面而附带请求的css,js,图片。因为我关心的是应用程序处理业务的能力。
---------------------------------------------------------------------------------------
基本概念:
Throughput(吞吐量):按照常规理解网络吞吐量表示在单位时间内通过网卡数据量之和,其中即包括本机网卡发送出去的数据量也包括本机网卡接收到的数据量。
并发用户数:是同时执行操作的用户
响应时间:对请求作出响应所需要的时间
---------------------------------------------------------------------------------------
JMeter测试参数说明:
Label:每一个测试单元的名字。
#Samples:表示一个测试单元一共发出了多少个请求。
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间。,不重要。
Median:中位数,也就是 50% 用户的响应时间,如果把响应时间从小到大顺序排序,那么50%的请求的响应时间在这个范围之内。重要。
90% Line:90% 用户的响应时间,如果把响应时间从小到大顺序排序,那么90%的请求的响应时间在这个范围之内。重要。
Min:最小响应时间,不重要。
Max:最大响应时间,出现几率只不过是千分之一甚至万分之一,不重要。
Error%:本次测试中出现错误的请求的数量
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
---------------------------------------------------------------------------------------
loadrunner测试参数说明:
响应时间: 取90%值,如果把响应时间从小到大顺序排序,那么90%的请求的响应时间在这个范围之内。重要。
每秒点击数 :hits per Second,每秒钟向服务器提交请求的数量。
TPS: Transaction per Second ,每秒事务数,一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程
Throughput(吞吐量): Loadrunner记录的Throughput是接收到服务器返回的所有字节数之和,与本地发出的字节数无关。
Throughput/Sec: 每秒的吞吐量。
对于BS架构的一般分析 响应时间、点击率、吞吐量、TPS(每秒事务数)。
对于CS架构的一般分析 TPS(每秒事务数)
---------------------------------------------------------------------------------------
Apache ab测试参数说明:
RPS: Request per Second,每秒处理的请求数
详见:
http://blog.chinaunix.net/u3/108043/showart_2260477.html
---------------------------------------------------------------------------------------
测试配置如下图: 其实jmeter还是很弱的,我打开"集合点(synchronizing Timer)","察看结果树","用表格查看结果"中的任何一个都会导致性能下降和小部分请求的响应出错(可能是线程数太多了),所以禁用了。只启用了cookie管理器。
---------------------------------------------------------------------------------------
Tomcat6.0 配置文件的说明 ,做测试之前是要整清楚的。
默认的Server.xml中如下
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
enableLookups
是否允许DNS查询,当web应用程序要通过域名服务器查找机器名转换为IP地址时。会使用DNS查询,需要占用网络,延长较长
maxThreads
Tomcat可创建的最大的线程数,每一个请求须要一个线程来处理,原来的150太小了,我们测试时并发会超过他的。
acceptCount
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。
connnectionTimeout
网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为20000毫秒。
minSpareThreads
Tomcat初始化时创建的线程数
maxSpareThreads
一旦创建的线程中空闲线程超过这个值,Tomcat就会关闭不再需要的socket线程。
注意:maxThreads 设置为500,也就是最多有500个线程,为下一步的压力测试做好准备。
---------------------------------------------------------------------------------------
测试环境说明:
服务器: 4G内存,至强3.0 (4核超线程)CPU,windows 2003
测试机:笔记本 2G内存,p8600 CPU,windows XP
网络:100Mb局域网
测试软件:
Jmeter 2.3.4 分配了512M内存
tomcat 6 默认内存大小
---------------------------------------------------------------------------------------
测试时服务器CPU使用率 10%
测试时测试机CPU使用率 100%(测试机不行啊)
每次测试CPU都这样,就统一写这里了。
测试1:2213个请求/秒
100并发,循环100次,共10000个请求,请求一个大小3.34KB的jsp页面。
测试2:1889个请求/秒
100并发,循环100次,共10000个请求,请求一个servlet总控制器,验证权限后,new一个Action,再转发到一个大小3.34KB的jsp页面。
测试3:2607个请求/秒
100并发,循环100次,共10000个请求,请求一个3.2KB的html页面。
测试4: 833个请求/秒
100并发,循环100次,共10000个请求,请求一个13.4KB的html页面。与上面比是只是文件大了一些,性能就降了不少!!
测试5: spring 2012个请求/秒
100并发,循环100次,共10000个请求,请求一个spring3 MVC的action,再转发到一个0.8K的JSP,其内容是简单的html
测试6: spring 1800-1924个请求/秒
100并发,循环100次,共10000个请求,请求一个spring3 MVC的action,两个参数类型转换为int、Date,再new 一个List,再转发到一个1.3K的JSP,用JSTL标签显示List中的内容。
JSTL标签内容是如下,看来JSTL标签性能还是不错的。
<c:if test="${empty list}">
<tr>
<td align="center">无记录!</td>
</tr>
</c:if>
<c:if test="${not empty list}">
<tr>
<th>从 1 开始的迭代计数</th>
<th>从 0 开始的迭代计数</th>
<th>产品名称</th>
</tr>
<c:forEach items="${list}" var="item" varStatus="s">
<tr bgcolor=${s.index%2==0?"#E2E2E2":""}>
<td align="center">${s.count} </td>
<td align="center">${s.index} </td>
<td align="center">${item} </td>
</tr>
</c:forEach>
</c:if>
测试7: 图片 1997个请求/秒
100并发,循环100次,共10000个请求. 因为我使用了spring3 MVC,拦截/,所以图片不能访问,所以添加了:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
走默认的servlet,来访问2.5K的图片
测试8: 图片 1967个请求/秒
100并发,循环100次,共10000个请求,因为我使用了spring3 MVC,拦截/,所以图片不能访问,所以添加了:
<mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
来访问2.5K的图片,会走spring的可匹配的一个拦截器。
测试9:Struts2的测试
100并发,循环1次,没有循环100次,因为strtus2在这次测试中响应太慢了,我等不起了,所以单个url的测试样本从10000降到了100.一共11个url,共1100个样本。
"spring" 使用的就是前面“测试5”的URL,放在这里是为了与strtus2对比的。
"html" 使用的就是前面“测试3”的URL,放在这里是为了与strtus2对比的。
"struts2-1" 使用的是官方自带的示例项目,名称是struts2-blank-2.1.8.1.war
"struts2-2" 使用的是官方自带的示例项目,名称是struts2-showcase-2.1.8.1.war,我在其中随便选了一个action来做测试
"struts2-3" 同上
"struts2-4" 同上
"struts2-5" 同上
"struts2-6" 同上
"struts2-7" 同上
"struts2-8" 同上
"struts2-9" 同上
太忙了,没有时间对Struts2做优化,使用的都是官方带的示例,Struts2的测试结果不理想,放在这里做一个参考。“struts2-1”是struts2中测试成绩最好的,但也不理想。
测试10:Struts2的测试。
上一个测试结果太离谱了,第二天,想了想又重新测试了下,使用的还是struts2官方提供的struts2-blank-2.1.8.1.war示例。访问下面的action,action内容简单就是转发到一个JSP。
http://192.168.0.5/struts2/example/HelloWorld.action
下图是示例默认的action,我没有修改:
要说一说转发到的jsp,其中有struts2标签
<s:property value="message"/>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%{url}">English</s:a>
我把jsp改了,删除了所有struts2标签,只输出一行文件
天啊,性能超出我的想像,太好了。看来是struts2标签拖了后腿。
我把jsp改了,换了其它的struts2标签
标签是:
<s:form action="Login">
<s:textfield key="username"/>
<s:password key="password" />
<s:submit/>
</s:form>
看来struts2的标签性能太差了。
Struts2由于采用了 值栈、OGNL表达式、struts2标签库等,会导致性能下降。如果避免或减少使用这些,性能还是很好了。
Struts2的 多层拦截器、 多实例action不是导致性能问题的原因。
注:以上测试都没有数据库,也没有业务,action中,jsp中内容很简单。
---------------------------------------------------------------------------------------
其它测试文章:
http://zhaoshg.iteye.com/blog/356231
http://www.iteye.com/topic/679543
MVC框架性能比较
http://wenku.baidu.com/view/148d7e34eefdc8d376ee32ac.html
spring3mvc与struts2比较
http://www.iteye.com/topic/646240
附:
几种标签和框架组合解析数据时候的 性能测试对比
一、 数据
数据通过查询日志表得到数据,共 1302 条数据,将查询出的数据放入一个静态 List 中,保证每次请求的数据相同。
测试页面的元素相同,只是在取数据方式上不同。
二、 测试目标
1、 在 JSP 页面使用 struts2 标签的性能;
2、 在 JSP 页面使用 JSTL 标签的性能;
3、 在 Freemarker 页面使用 struts2 标签的性能;
4、 在 Freemarker 页面使用 JSTL 标签的性能;
5、 在 Freemarker 页面使用其本身的数据加载方式的性能。
三、 加载耗时对比
时间: ms 注:每一次对比都是在同一时间段按同一顺序依次执行下列几种方式
struts2 JSTL ( C ) Freemarker-struts2 Freemarker-C Freemarker 第一次 306 58 1618 41 第二次 202 52 1643 39 第三次 211 58 2047 36 第四次 196 49 1621 28 第五次 218 52 1607 40 第六次 303 331 1857 45 第七次 210 50 1671 33 第八次 311 51 1699 47 第九次 462 55 2180 37 第十次 218 46 1721 42 平均值 263.7 80.2 1766.4 38.8 去掉最高和最低 223.75 53.125 1547.125 39.125
发表评论
-
几个主流的Java连接池整理
2012-03-31 15:45 2007池 (Pool)技术在一定层度上可以明显优化服务器应用程 ... -
集群知识与JBoss集群配置[转]
2012-01-19 11:22 929集群概念 集群(Clus ... -
apache 负载均衡设置
2012-01-19 11:21 930Apache作为LoadBalance前置机分别有三种不同的部 ... -
apache + tomcat的动静分离
2012-01-19 11:21 1096此为转载,支持原创: http://dogdogcom.blo ... -
大量并发解决方案
2012-01-18 15:07 797大型高并发高负载网站的系统架构 我在Cernet做过拨 ... -
mod_gzip:Apache的HTTP压缩优化
2012-01-18 14:44 898HTTP压缩对于纯文本内 ... -
mysql集群系统的设计实现
2012-01-18 14:39 1096您的WebApp系统是否正在使用一个MySQL的数据库 ... -
rsync搭建同步策略
2012-01-18 14:16 896对系统管理员来说,平时的工作重心应该集中在维护系统正常运转,能 ... -
使用rsync从linux到linux或到windows对网站进行镜像备份
2012-01-18 14:13 1161rsync是Linux系统下的数据 ...
相关推荐
**Struts2与Spring MVC比较:** 1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2...
spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 ...
Struts2和Spring是两个非常重要的Java开源框架,它们分别在MVC(Model-View-Controller)架构和依赖注入(Dependency Injection,DI)方面发挥着关键作用。将这两个框架整合在一起,可以构建出高效、可维护的企业级...
3. **Struts2的插件机制**:Struts2提供了Spring插件,该插件负责连接Struts2和Spring,允许Struts2通过Spring获取Action实例。这需要在struts.xml配置文件中添加相应的配置。 4. **AOP代理**:Spring的AOP功能可以...
在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖注入(DI)和面向切面编程(AOP)等功能,而 Struts 2 则是一个强大的MVC(Model-View-Controller)框架,负责处理用户请求和业务逻辑。 Struts 2 和 ...
Struts2-Spring-Plugin-2.2.1.jar 是一个专门为 Struts2 框架与 Spring 框架集成而设计的插件。这个插件的主要目的是简化在基于Struts2的应用程序中整合Spring的功能,如依赖注入(DI)、AOP(面向切面编程)以及...
Struts2与Spring3的整合,使得我们可以利用Spring来管理Struts2的Action,从而实现依赖注入,提高代码的可测试性和可维护性。 Spring3则是企业级应用的全面解决方案,包括IoC(Inversion of Control,控制反转)和...
- `StrutsSpring`可能包含一个简单的整合示例,包括Struts2的配置文件、Spring的配置文件以及相关的Action类和业务接口。 - 示例可能会展示如何配置Action类,如何在Spring中定义bean,以及如何在Struts2中引用...
Struts2、Spring和MyBatis是Java Web开发中经典的三大框架,它们分别负责MVC模式中的控制层、业务层和服务层。EasyUI则是一个基于jQuery的UI组件库,用于快速构建美观且响应式的Web应用界面。下面我们将深入探讨这三...
同时,Spring4的Spring MVC模块可以与Struts2结合使用,提供另一种MVC实现方式,以应对更复杂的应用场景。 Hibernate则是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在电子商务系统...
`struts2-spring-plugin-2.5.16.jar`是Struts2与Spring集成的插件,它使得Struts2可以利用Spring的依赖注入(DI)和面向切面编程(AOP)能力。通过这个插件,我们可以将Action类的实例化和管理交给Spring容器,从而...
Struts2提供了MVC(模型-视图-控制器)架构,帮助开发者更好地组织和管理应用程序逻辑,而Spring则是一个全面的后端框架,提供依赖注入、AOP(面向切面编程)、事务管理等特性。 在"Struts2+Spring练习"项目中,...
"spring-webmvc-struts"可能指的是Spring与Struts的集成包,Struts是另一个流行的Java Web MVC框架。这个库可能包含了一些桥接代码,帮助开发者将Spring的IoC(Inversion of Control,控制反转)和AOP功能与Struts的...
Struts2、Spring3和Hibernate3是Java Web开发中经典的SSH(Struts2、Spring、Hibernate)企业级应用框架组合。这些框架各自扮演着不同的角色,共同构建了一个强大的后端开发解决方案。 Struts2作为MVC(Model-View-...
SSH(Struts2、Spring3、Hibernate4)是Java Web开发中的一个经典组合,用于构建高效、可维护的Web应用程序。这个压缩包包含了SSH框架集成的相关资料,让我们逐一解析其中的知识点。 首先,Struts2是MVC(Model-...
本文将对比分析Struts与Spring这两种流行的MVC框架,帮助开发者更好地理解它们的特点与适用场景。 #### Struts框架详解 **背景介绍** Struts是Apache Jakarta项目下的一个开源框架,由Craig R. McClanahan等人...
Spring还提供了Spring MVC模块,用于构建Web应用程序,它与Struts2类似,也是一个MVC框架,但提供了更现代的API和更强大的数据绑定功能。 当我们把Struts2和Spring结合起来使用时,可以创建出高效且可维护的企业级...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,用于简化开发并提供更好的控制层。它提供了丰富的拦截器、结果类型和插件机制,使得开发者能够方便地处理请求、控制业务流程和展示视图。...
在IT领域,特别是Java开发中,Struts2、Spring以及Hibernate(SSH)组合是一个非常流行的MVC(Model-View-Controller)架构模式实现方案。尽管标题和描述中的重复信息可能是一个错误,但我们可以深入探讨Struts2、...
3. **Struts2与Spring的整合**: - **Spring插件**:Struts2提供了一个Spring插件,使得Spring管理的Bean可以直接作为Struts2的Action。 - **Action配置**:在struts.xml中声明Spring管理的Action,不再需要在...