专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » tomcat:Tomcat性能调整 »正文

tomcat:Tomcat性能调整

来源: 发布时间:星期一, 2009年4月6日 浏览:0次 评论:0
. 引言   性能测试和分析是软件Software开发过程中介于架构和调整个广泛并比较不容易理解领域更是项较为复杂活动就像下棋游戏有效性能测试和分析只能在个良好计划策略和具备了对不可预料事件处理能力条件下顺利地完成个下棋高手赢得比赛靠不仅仅是对游戏规则认识更是靠他自己能力和不断地专注于分析自己对手实力来更加有效地利用和发挥规则作用同样个优秀性能测试和分析人员将要面对是来自个全新应用和环境下带来整个项目挑战本文中作者结合自己使用经验和参考文档对Tomcat性能方面调整做简要介绍并给出Tomcat性能测试、分析和调整优化些思路方法 2. 测量Web服务器性能   测量web服务器性能是项让人感到畏缩任务但是我们在这里将给出些需要注意地方并且指点你了解其中更多细节性内容它不像些简单任务如测量CPU速率或者是测量占用CPU比例web服务器性能优化中包括许调整许多变量来达到目标许多测量策略中都包含了个看似简单浏览实际上是在向服务器发送大量请求我们称的为客户端来测量响应时间客户端和服务器端是在同台机器上吗?服务器在测试时候还运行着其它什么吗?客户端和服务器端通讯是通过局域网100baseT10baseT还是使用调制解调器?客户端是否直重复请求相同页面还是随机地访问区别页面?(这些影响到了服务缓存Cache性能)客户端发送请求有规律还是突发?你是在最终配置环境下运行服务还是在调试配置环境下运行服务?客户端请求中包含图片还是只有HTML页面?是否有请求是通过servlets和JSPCGI服务端包含(Server-Side Includes SSI是个可以让你使用动态HTML文件技术)?所有这些都将是我们要关心并且几乎我们不可能精确地把所有问题都清楚地列出来   1.压力测试工具   “工欲善其事必先利其器”压力测试只有借助于些工具才可得以实施   大多数web压力测试工具实现原理都是通过重复大量页面请求来模拟多用户对被测系统并发访问以此达到产生压力产生压力手段都是通过录制或者是编写压力脚本这些脚本以多个进程或者线程形式在客户端运行这样通过人为制造各种类型压力我们可以观察被测系统在各种压力状况下表现从而定位系统瓶颈作为系统调优基础目前已经存在性能测试工具林林总总数量不下百种从单开放源码免费小工具如 Aapache 自带 web 性能测试工具 Apache Benchmark、开源Jmeter 到大而全商业性能测试软件Software如 Mercury LoadRunner 等等任何性能测试工具都有其优缺点我们可以根据实际情况挑选用最合适工具您可以在这里找到些web压力测试工具http://www.softwareqatest.com/qatweb1.html#LOAD   这里我们所使用工具要支持web应用服务认证才可以要支持接收发送cookies不仅如此Tomcat支持多种认证方式比如基本认证、基于表单认证、相互认证和客户端认证些工具仅仅支持HTTP基本认证真实地模拟用户认证是性能测试工具个重要部分认证机制将对个web站点性能特征产生重要影响基于你在产品中使用区别认证方式你需要从上面工具列表中选择使用这种特性测试工具   Apache Benchmark和http_load是命令行形式工具非常易于使用Apache Benchmark可以模仿单独URL请求并且重复地执行可以使用区别命令行参数来控制执行迭代次数并发用户数等等个特点是可以周期性地打印出处理过程信息而其它工具只能给出个全局报告   2.压力测试工具介绍   1) Apache Benchmark   下面是运行Apache Benchmark例子响应时间非常长是它运行在个配置非常低系统上(Pentium 233)在这里我们用它来访问个URL模拟127个并发用户重复执行1000次 Root$ ab -k -n 1000 -c 127 -k http://tomcathost:8080/examples/date/date.jsp This is ApacheBench, Version 2.0.36 <$Revision: 1.1 $> apache-2.0 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking tomcathost (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Finished 1000 requests Server Software: Apache Server Hostname: tomcathost Server Port: 8080 Document Path: /examples/date/date.jsp Document Length: 701 s Concurrency Level: 127 Time taken for tests: 53.162315 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Non-2xx responses: 1000 Keep-Alive requests: 0 Total transferred: 861000 s HTML transferred: 701000 s Requests per second: 18.81 [#/sec] (mean) Time per request: 6.752 [ms] (mean) Time per request: 0.053 [ms] (mean, across all concurrent requests) Transfer rate: 15.80 [Ks/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 51 387.5 0 2999 Processing: 63 6228 2058.4 6208 12072 Waiting: 17 4236 1855.2 3283 9193 Total: 64 6280 2065.0 6285 12072 Percentage of the requests served within a certain time (ms) 50% 6285 66% 6397 75% 6580 80% 9076 90% 9080 95% 9089 98% 9265 99% 12071 100% 12072 (longest request)   2) Apache JMeter 中请求响应时间(图略)  3) Mercury LoadRunner测试实时监控(图略)   这 3个工具是所有类似性能测试工具典型代表可以根据你自己需要选择区别测试工具这里不对以上工具做详细介绍如果您对这些测试工具感兴趣话可以参阅附加资料   3.性能评测窍门技巧   1) 由于评测时要用到系统时钟所以当进行测试时不要运行无关进程或以免影响测试结果;   2) 如果对自己进行了修改并试图改善它性能那么在修改前后应分别测试下代码执行时间;   3) 尽量在完全环境中进行每次测试;   4) 如果可能应设计个不依赖于任何用户输入测试测试中使用数据应完全避免用户区别反应或者数据问题导致测试结果出现误差;   5) 有可能您还需要考虑是在运行着系统(包括操作系统和被测试系统)上继续进行测试还是重新启动系统后再进行测试;   6) 对于有些系统第次使用可能要进行这种工作在系统使用过程中仅进行所以有必要在重启系统后先进行化工作然后进行性能测试 3. 外部环境调整   在Tomcat和应用进行了压力测试后如果您对应用性能结果不太满意就可以采取些性能调整措施了当然了前提是应用没有问题我们这里只讲Tomcat调整由于Tomcat运行依赖于JVM所以在这里我们把Tomcat调整可以分为两类来详细描述:   外部环境调整   调整非Tomcat组件例如Tomcat运行操作系统和运行Tomcatjava虚拟机   自身调整   修改Tomcat自身参数调整Tomcat配置文件中参数   下面我们将详细讲解外部环境调整有关内容Tomcat自身调整内容将在第2部分中阐述   1.JAVA虚拟机性能优化   Tomcat本身不能直接在计算机上运行需要依赖于硬件基础的上操作系统和个java虚拟机您可以选择自己需要选择区别操作系统和对应JDK版本(只要是符合Sun发布Java规范标准)但我们推荐您使用Sun公司发布JDK确保您所使用版本是最新Sun公司和其它些公司直在为提高性能而对java虚拟机做些升级改进些报告显示JDK1.4在性能上比JDK1.3提高了将近10%到20%   可以给Java虚拟机设置使用内存但是如果你选择不对虚拟机不会补偿可通过命令行方式改变虚拟机使用内存大小如下表所示有两个参数用来设置虚拟机使用内存大小 参数JAVA中文站社区门户c^%o[Jl.\

JAVA中文站社区门户)]L:XZ#^iyJr.K3y

S["a3aJ R#N7Bgg 描述JAVA中文站社区门户4ZG&}7^;@3w L

JAVA中文站社区门户1j$P&b }WJAVA中文站社区门户8JOr6Yl#Y


-Xms

H6p-x8H7F.j;b7X4u JAVA中文站社区门户$EQS9vJC

(k&~5hP/} O Z)i:L JVM化堆大小JAVA中文站社区门户E;l+l)P6I-v X'g?L)\

JAVA中文站社区门户j:E T1OIUvvW

aS6K8k"fjb
-XmxJAVA中文站社区门户5yr3w ~ pT0k b"`

JAVA中文站社区门户B[$ssZ

/B^t8a&y9Y7^v*^ JVM堆最大值JAVA中文站社区门户{8X;MZaZ

JAVA中文站社区门户8xSH hX?|5KWir'T

+M G7r E(f


  这两个值大小般根据需要进行设置化堆大小执行了虚拟机在启动时向系统申请内存大小般而言这个参数不重要但是有应用在大负载情况下会急剧地占用更多内存此时这个参数就是显得非常重要如果虚拟机启动时设置使用内存比较小而在这种情况下有许多对象进行虚拟机就必须重复地增加内存来满足使用由于这种原因我们般把-Xms和-Xmx设为样大而堆最大值受限于系统使用物理内存般使用数据量较大应用会使用持久对象内存使用有可能迅速地增长当应用需要内存超出堆最大值时虚拟机就会提示内存溢出并且导致应用服务崩溃因此般建议堆最大值设置为可用内存最大值80%   Tomcat默认可以使用内存为128MB在较大型应用项目中这点内存是不够需要调大   Windows下在文件{tomcat_home}/bin/catalina.batUnix下在文件{tomcat_home}/bin/catalina.sh前面增加如下设置:   JAVA_OPTS='-Xms【化内存大小】 -Xmx【可以使用最大内存】'   需要把这个两个参数值调大例如:   JAVA_OPTS='-Xms256m -Xmx512m'   表示化内存为256MB可以使用最大内存为512MB   另外需要考虑是Java提供垃圾回收机制虚拟机堆大小决定了虚拟机花费在收集垃圾上时间和频度收集垃圾可以接受速度和应用有关应该通过分析实际垃圾收集时间和频率来调整如果堆大小很大那么完全垃圾收集就会很慢但是频度会降低如果你把堆大小和内存需要完全收集就很快但是会更加频繁调整堆大小是最小化垃圾收集时间以在特定时间内最大化处理客户请求在基准测试时候为保证最好性能要把堆大小设大保证垃圾收集不在整个基准测试过程中出现   如果系统花费很多时间收集垃圾请减小堆大小次完全垃圾收集应该不超过 3-5 秒如果垃圾收集成为瓶颈那么需要指定代大小检查垃圾收集详细输出研究 垃圾收集参数对性能影响般说来你应该使用物理内存 80% 作为堆大小当增加处理器时记得增加内存分配可以并行进行而垃圾收集不是并行  2.操作系统性能优化   这里说操作系统是指运行web服务器系统软件Software当然区别操作系统是为区别而设计比如OpenBSD是面向安全因此在它内核中有许多限制来防止区别形式服务攻击(OpenBSD句座右铭是“默认是最安全”)这些限制或许更多地用来运行活跃web服务器   而我们常用Linux操作系统目标是易用使用因此它有着更高限制使用BSD内核系统都带有个名为“Generic”内核表明所有驱动器都静态地和的相连这样就使系统易于使用但是如果你要创建个自定义内核来加强其中某些限制那就需要排除不需要设备Linux内核中许多驱动都是动态地加载但是换而言的内存现在变得越来越便宜所以加载额外设备驱动就显得不是很重要重要是要有更多内存并且在服务器上腾出更多可用内存   小提示:虽然现在内存已经相当便宜但还是尽量不要购买便宜内存那些有牌子内存虽然是贵但是从可靠性上来说性价比会更高   如果是在Windows操作系统上使用Tomcat那么最好选择服务器版本在非服务器版本上最终用户授权数或者操作系统本身所能承受用户数、可用网络连接数或其它方面些方面都是有限制并且基于安全性考虑必须经常给操作系统打上最新补丁   3.Tomcat和其它web服务器整合使用   虽然tomcat也可以作web服务器,但其处理静态html速度比不上apache,且其作为web服务器功能远不如apache,因此我们想把apache和tomcat集成起来将html和jsp功能部分进行明确分工让tomcat只处理jsp部分其它由apache,IIS等这些web服务器处理由此大大节省了tomcat有限工作“线程”   4.负载均衡   在负载均衡思路下多台服务器为对称方式每台服务器都具有同等地位可以单独对外提供服务而无须其他服务器辅助通过负载分担技术将外部发送来请求按定规则分配到对称结构中台服务器上而接收到请求服务器都独立回应客户机请求   提供服务组服务器组成了个应用服务器集群(cluster)并对外提供个统地址个服务请求被发至该集群时根据定规则选择台服务器并将服务转定向给该服务器承担即将负载进行均衡分摊   通过应用负载均衡技术使应用服务超过了台服务器只能为有限用户提供服务限制可以利用多台服务器同时为大量用户提供服务当某台服务器出现故障时负载均衡服务器会自动进行检测并停止将服务请求分发至该服务器而由其他工作正常服务器继续提供服务从而保证了服务可靠性   负载均衡实现方式大概有 4种:第是通过DNS但只能实现简单轮流分配不能处理故障第 2如果是基于MS IISWindows 2003 server本身就带了负载均衡服务第 3是硬件方式通过交换机功能或专门负载均衡设备可以实现第 4种是软件Software方式通过台负载均衡服务器进行上面安装软件Software使用Apache Httpd Server做负载平衡器Tomcat集群节点使用Tomcat就可以做到以上第 4种方式这种方式比较灵活成本相对也较低另外个很大优点就是可以根据应用情况和服务器情况采取些策略

TAG: tomcat TOMCAT Tomcat 调整 性能
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: