随笔 - 42  文章 - 71  trackbacks - 0
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

1. 目的

Sitemesh 是一个很好的页面渲染框架,基本上我现在所在项目都是适用sitemesh做页面框架和整合渲染的,给页面部分的工作带来了很大的便利性。

在sitemesh的文档中,对于sitemesh的工作原理给出了一个图示,根据这个图可以看出,sitemesh是通过组合适用filter和标签将被渲染页面的内容抽取出来,再整合到一个统一的框架页面中去。曾经有一段时间测试环境的Websphere服务器频繁出现内存溢出的问题,在跟踪内存溢出问题时,发现sitemesh组件使用StringBuffer对象进行大量内存申请的动作。这就需要检测sitemesh具体是如何来分析页面的,我的猜测就是将被渲染的页面中的最终HTML代码展出到一个大的字符串,然后根据关键标签来进行分析和内容抽取,然后再整合到框架页面中。先不管sitemesh是用什么方式来分析、抽取和整合的,他对于内存的影响是比较明显的,所以,本实验的目的就是比较使用sitemesh和不使用sitemesh时,运行期性能是否存在差异。

 

2. 环境

本实验使用到的环境如下:

· OS: Windows XP Professional SP2

· HW: Intel Core 2 Duo T7300 2.0GHz, 2GB RAM

· Web Server: Resin 3.2.1

· Sitemesh: 2.3

· Test Tool: Load Runner 8.0

· JDK: Java HotSpot(TM) Client VM 1.5.0_09-b03

· Analysis Tool: IBM Pattern Modeling and Analysis Tool for Java Garbage Collector 2.5

 

 

3. 过程

1. 使用ant example创建sitemesh自带的example web应用

2. 在sitemesh example应用中加入一个JSP页面data.jsp,该页面中包含一个43行7列的静态表格,表格部分的HTML源码约17KB

3. 同样制作上述数据的非sitemesh处理页面data_nosm.jsp,在sitemesh的配置文件decorators.xml中将data_nosm.jsp添加到排除列表

4. 以展开包的方式部署sitemesh example应用到resin服务器

5. 设置resin的JVM参数为:-Xms64m -Xmx256m -XX:MaxPermSize=256m -Xss1m -verbose:gc -Xloggc:C:/apps/resin-3.2.1/gc.log -XX:+PrintGCDetails

6. 在Load Runner中制作2个压力测试脚本,一个用来请求data.jsp,一个用来请求data_nosm.jsp

7. 在Load Runner中设计压力测试场景:10个用户,持续请求5分钟,每个用户的每轮请求中包含10次对于页面的请求

8. 重新启动resin服务器,进行data.jsp的压力测试。测试完成之后,收集Load Runner的数据以及GC的数据

9. 重新启动resin服务器,进行data_nosm.jsp的压力测试。测试完成之后,收集Load Runner的数据以及GC的数据

10. 数据汇总及处理

 

 

4. 结果

根据测试的结果,整理GC部分和压力测试部分的数据如下:

 

使用sitemesh

未使用sitemesh

GC次数

6,746

74

Full GC次数

1

1

GC消耗

0.02

0.00

GC暂停(秒)

7.00

0.00

最大持久代(字节)

8,388,608.00

8,388,608.00

平均持久代(字节)

6,036,328.00

6,205,085.00

最大旧生代(字节)

61,983,744.00

59,024,384.00

平均旧生代(字节)

42,583,685.00

31,929,903.00

最大新生代(字节)

61,983,744.00

59,024,384.00

平均新生代(字节)

4,426,710.00

4,610,566.00

请求次数

137,344.00

198,188.00

平均每秒请求

454.78

658.43

页面平均响应时间(秒)

0.042

0.029

上表的数据制作成图表如下(为了便于图表显示,部分数据进行了放大):

 

未命名

在上表中,GC消耗和GC暂停考量指标中,未使用sitemesh的情况下显示为0,是因为所用的分析工具IBM Pattern Modeling and Analysis Tool for Java Garbage Collector 2.5的显示精度不足导致,实际的并非是真正的0,而应该是一个很小的数值。

从数据上看,使用sitemesh和不使用sitemesh对于虚拟机堆内存的使用差异不太大,但是在GC次数上的差异很大。从GC日志的详细信息可以看出,在使用sitemesh时,发生次要GC(Minor GC)的频率非常的高,可以推断在运行时期产生了大量的短生命周期的对象,然后又迅速的被释放,GC在新生代就已经完成了。主要GC(Major GC, Full GC)在使用sitemesh和不使用的情况下,均发生了1次,而且这1次主要GC也是在resin启动中发生的,不是应用在进行压力测试时发生的。由于使用sitemesh时的GC次数远远大于不使用sitemesh,所以在整个测试过程中,GC上消耗的时间也是差异非常大的。

从压力测试的探测可以看出,不使用sitemesh时完成的请求数是使用sitemesh时的144.3%。同时页面响应时间也仅为使用sitemesh时的69.0%。

 

5. 结论

从上述测试数据来分析,使用sitemesh对于系统性能是有较大的影响的,主要表现在GC的次数会显著增多。建议在大压力、页面内容大的系统中,慎重选择sitemesh,并且使用之前对其带来的性能影响进行一个较为合理、全面的评估。

posted on 2009-07-14 22:17 YODA 阅读(3347) 评论(8)  编辑  收藏

FeedBack:
# re: Sitemesh对于性能的影响实验报告 2009-07-15 00:00 俊星
条分缕析,楼主的文章很有严谨缜密啊。  回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告[未登录] 2009-07-15 09:42 YODA
多谢俊星兄鼓励!  回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告[未登录] 2009-07-15 09:45 a
真的很严谨,值得学习。  回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告 2009-07-15 11:19 ahx
非常感谢分析,是否可以用一个实际项目再测试一下呢。 例如,我们系统的一个页面(非信息展示页面)一般一个请求的处理时间60-80毫秒,这时会不会sitemesh对性能的影像就可以忽略了呢?   回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告 2009-07-15 11:57 99读书人
很不错哦  回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告[未登录] 2009-07-15 12:18 YODA
谢谢楼上诸位兄台的支持

to: ahx 如果你的页面响应时间能够在系统压力高峰期控制在60-80毫秒这么短的时间,那么我觉得sitemesh的影响相对比重反倒更大,但是绝对值应该很小。其实用与不用,只要能够达到客户要求的压力指标就可以了,比如客户会给定一个多少并发的前提下,要求系统达到多少TPS。一切都是为了满足需求,呵呵  回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告 2009-07-16 21:20 javafuns
性能肯定是要受到影响的,尤其是页面内容越多,这种影响应该更明显  回复  更多评论
  
# re: Sitemesh对于性能的影响实验报告 2010-03-20 10:24 rplees
一串数字,然而切让人付出心血。
谢谢你的数字。我找到我所要的答案啦。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: