Tomcat性能调优指导手册.pdf
Tomcat性能调优指导手册1. 概述 32. Java虚拟机性能调优 32.1 catalina.sh 或 catalina.bat 32.2 winNT服务 33. 禁用DNS查询 44. 调整线程数(连接数) 45. 使用gzip传输 56. 负载均衡 56.1 实现负载均衡的方式 56.2 集成Apache Server 66.2.1 配置负载均衡器 67. 启用APR库 118. 使用Jconsole监控 129. 调优综述 13Tomcat性能调优指导于册摩卡软件1.概述本文档主要介绍了 Tomcat的性能调优的原理和方法。可作为公司技术人员为客户Tomcat系统调优的技术指南,也可以提供给客户的技术人员作为他们性能调优的指导手册。由于 Tomcat的运行依赖于JM,从虚拟机的角度我们把τ mcat的调整分为外部环境调优和自身调优两类来描述2.Java虚拟机性能调优Tomcat需要依赖Java虚拟札运行。根据客户选用的主机的操作系统选择对应的」DK的版本。无论哪个厂商的JDK,都建议使用最新的版本。JAVA程序启动时都会M都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在定程度都会影响程序的性能。比如说在应用程序用到最大內存的时候,八M是要先去做垃圾叵收的动作,释放破占用的一些内存。所以想调整 Tomcat的启动时初始内存和最大内存就需要向MM声明,一般的JAVA程序在运行都可以通过中-Xms-Xmx来调整应用程序的初始内存和最大内存:如: java-Xms64mXmx128 m application jar。虚拟机可通过命令行的方式改变虚拟机使用内存的大小。如卜表所示,有两个参数用来设置虚拟机使用内存的大小:参数描述Xms≤size>丿VM初始化堆的大小-Xmx丿VM堆的最大值2.1 catalina.sh E catalina. bat如果是使用的 tomcat home/bin/ catalina . sh(inux)或 catalina. bat(win)启动的,修改相应文件,加上下面这句:JAVA OPTS='SJAVA OPTS -server -Xmx800m-Xms512m-XX. MaxNewSize=256mXX: Max PermSize =256m-Djava awt headless=true22 winNt服务如果是通过 Windows服务的方式启动,在命令行键入 regedit,找到HKEY LOCAL _MACHINE--> SOFTWARE--> Apache Software Foundation -> Procrun 2.03/13Tomcat性能调优指导于册摩卡软件Tomcat5-> Parameters的Java,修改 Options的值,新添加属性Xms64m、-Xmx128m(或者直接修改JmMx和 JymMs)建议Xms和Xmx的值取成一样比较好,这样可以加快内存回收速度。修改完之后,可以通过访问htt:127001:8080/ manager/ status查看内存大小。3禁用DNS查询当web应用程序要记录客户端的信息时,它也会记录客户端的|P地址或者通过域名服务器査找机器名转换为|P地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的伊P的过程,这样公消耗一定的时间。为了消除DNS査询对性能的影响我们可以关闭DNS查询,方式是修改 server. xm文件中的 enableLookups参数值:< Connector port= 80 maxThreads=150"minSpare Threads="25" maxSpareThreads=75enableLookups="falseredirectOr=8443acceptCount=100debug="0connectionTimeout=20000"disableUploadTimeout="true/>除非客户需要连接到站点的每个HTTP客户端的机器名,否则我们建议在生产环境上关闭DNS査询功能。可以通过 Tomcat以外的方式来获取机器名。这样不仅节省了网络带宽査询时间和内存,而且更小的流量会使日志数据也会变得更少,显而易见也节省了硬盘空间。对流量较小的站点来说禁用DNS査询可能没有大流量站点的效果明显4.调整线程数(连接数)在 tomcat配置文件 server. xm中的配置中,和连接数相关的参数有:参数描述maxThreads最多同时处理的连接数(可创建的最大的线程数)minSpare Threads即使没有人使用也川这么多空线程等待(初始化吋创建的线程数)maxSpareThreads最多可以空闲的线程个数acceptCount当同时连接的人数达到 maxthreads时,还可以接收排队的连接数,超过这个数值的请求则直接返回拒绝连接。connectiontimeout网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。例 小提示: web server允许的最大连接数还受制于操作系统的内核参数改置,通常 Windows是2000个左右, Linux是1000个左右5.使用gzip传输在 tomcat配置文件 server.xm中的配置,和gzip压缩相关的参数有:参数描述ompression是否启动压缩功力能compression MinSize最小压缩大小,超过这个大小,将使用gzip压缩传输noCompression UserAgents对哪些用户(浏览器)不开启压缩功能compressa| le Mime Type设定需要压缩的请求格式示例:connEctorport=8080"protocol=http:/i.1acceptcount=100maxThreads=500"minSpare Threads="25"maxSpare Threads="75"compression= oncompression Min Size=2048"noCompressionUserAgents- gozilla, traviatacompressableMimeType="text/html, text/xm,text /javascript, text/css, text/plainconnection Timeout="20000″ redirectOr=“443″/>6负载均衡在负载均衡的思路下,多台服务器为对等方式,每台服务器都具有同等的地位,可以单独对外提供服务而无须其他服务器的辅助。通过负载分担技术,将外部发送来的请求按·定规则分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求提供服务的·组服务器组成了个应用服务器集群( cluster),集群下的对等多机环境可以增加系统的并发处理能力,和单台机器岀现故障系统的错误冗余能力;同时实现了负载均衡和系统高可靠性61实现负载均衡的方式1.通过DNS,但只能实现简单的轮流分配,不能处理故障;2.如果是基于MsS, Windows2003 server本身就带」负载均衡服务5/13Tomcat性能调优指导于册摩卡软件3.硬件方式,通过交换机的功能或专门的负载均衡设备可以实现:4.软件方式,通过一台负载均衡服务器进行,上面安装软件,使用 Apache Httpd Server做负载平衡器。62集成 Apache Server虽然 tomcat也可以作web服务器,但其处理静态htm的速度比不上 apache,且其作为Web服务器的功能远不如 apache,因此我们想把 apache和 tomcat集成起来,将htm与jsp的功能部分进行明确分工,让 tomcat只处理jsp部分,其它的由 apache,S等这些Web服务器处理,由此大大节省了tomcat有限的工作线程。一般都采用Apachehttpd作为web服务器,即作为τomat的前端处理器,根据具体情况而定,有些情况下是不需要Apachehttpd作为web服务器的,如系统展现没有静态页面那就不需要Apachehttpd,那时可以直接使用Tomcat作为web服务器来使用。使用Apachehttpd主要是它在处理静态页面方面的能力比 Tomcat强多了Apache和 Tomcat的整合有三种方式,分别是J、htt_ proxy和ajp_ proxy.其中J方式是最常见的方式,」本身有两个版本分别是1和2,目前1最新版本是1.2.8,而版本2早经废弃了。httpproxy是利用Apache自带的mod_proxy模块使用代理技术来连接TomcatsAjp proxγ连接方式其实跟htt_ proxy方式一样,都是由mod_ proxy所提供的功能。只需要把配置中的http:/3成ajp/同时连接的是Tomcat的AJPConnector所在的端口。相对」Ⅸ的连接方式,后两种在配置上比较简单的,灵活性方面也一点都不逊色。但就稳定性而言不像」这样久经考验,所以建议采用」K的连接方式。621配置负载均衡器使用到的两个配置文件分别是httpdconf和modjk.confo其中httpdconf是Apache服务器的配置文件,用来加载」K模块以及指定」K配置文件信息。 mod jk.conf是到 Tomcat服务器的连接定义文件。每次修改httpd.conf,workersproperties和modjk.conf时不要忘了重新启动 apacheTomcat性能调优指导于册摩卡软件6.211安装和调试 apache负载均衡器j2模块是 apache www服务的插件,所以配置负载均衡器就得先安裝pache。值得注意的是,安装并启功 apache后如果 apache对htt:! localhost/地址没反应你得修改 apache安装路径下 htdocs目录下的 index. htmL.xx文件,比如把 index htmlen改成index htm|。Apache需要调整运行参数,这样才能构建个适合相应网络环境的web服务。其中可进行的优化配置如下:1.设置MPM( Multi Processing Modules多道处理模块)。 Thread Perchild这个参数用于设置每个进程的线程数,在windσws环境下默认值是64,最大值是1920,建议设置为100-500之间,服务器性能高的话值大一些,反之小一些。 MaxRequestPerChild表示每个子进程能够处理的最大请求数。这个参数的值更大程度上取决于服务器的内仔,如果内存比较大的话可以设置为很大的参数,否则设置一个较小的值,建议值是30002.关闭DNS和名字解析 HostnameLookups off3.打开 Use canonica|Name模块 Use canonica| Name on4.关闭多余模块一般来说,不需要加载的模块有, mod include.So、 mod autoindex.somod access so mod auth. so5.打开 Keepalive支持KeepAlive on, Keep Alive Timeout 15, MaxKeep Alive Requests 1000根据实际经验,通过 Apache和 Tomcat集群的方式提高系统性能的效果十分明显,这种方式可以最大化的利用硬件资源,通过多个 Tomcat的处理来分担单 Tomcat时的压力。6212安装jk2把下载到的 mod jk2-20.43d改成modj2d放到 apache的 modules目录下,修改apache的httpdconf即在LoadModulefoomodulemodules/modfoo.so行下插入modjk2模块的装载信息:Example: Load Module foo module modules/mod foo. soTomcat性能调优指导于册摩卡软件LoadModule jk2 module modules/mod jk2. dll6213配置jk2jk2的配置全在一个配置文件中,文件名为 workers2 properties,和 apache的httd,conf放在同一个日录下。以下是这个文件的内容#++++++++++++++++++++++++++++++++++++only at beginnin. In production uncomment it outlogger. apache2」level=DEBUG#shm必须配file=D: /Program Files/Apache Group/Apache 2/logs/shm. filesize=1048576#第一个 tomcat的地址Example socket channel, override port and host[channel socket: tomcat]port=11009host=127.0.0.1#定义第一个工作者指向第一个 tomcat#t define the workerlajp13: tomcat1]channel=channel socket: tomcat1#第二个 tomcat得地址Example socket channel, override port and hostIchannel. socket: tomcatport=12009host=10.1.36.123#定义第二个工作者指向第二个 tomcat#t define the workerlajp13: tomcat]channel=channel socket: tomcat2#定义负载均衡器,使其包含两个工作者[b:|b1Tomcat性能调优指导于册摩卡软件worker=ajp13: tomcatworker=ajp13: tomcat#指定负载均衡器完成单一地址映射,使得 apache服务所在的uri全部指向两个 tomcat上的rootUri mappingurIgroup=lb: Ib1#++++++++++++++++++++++++++++++++++++++++++6214配置 tomcat冋属于一个集群下的两个服务实体,要求功能的冋一性,所以我们可先安装和配置第一个 tomcat,接着拷贝形成第二个 tomcat,最后配置第二个 tomcat。安装 tomcat非常简单夲文就不再描述。我们假设第一个 tomcat的安装路径为d:/ tomcat1配置第一个 tomcattomcat中的j2 connector缺省端口为8009,为∫在一台机器上运行两个 tomcat,修改D:/ Tomcat1conf/jk2 properties,设置jk2 connector的端口为11009,整个文件内容如下#++++++++++++++channelSocket. port=11009#++++++++++++++为了让一台机器上运行两个 tomcat,修改 server conf的 tomcat停止指令监听端口改为然后打开JK2 AJP connector,关闭其它 connector,下面是JK2AP13的样子,这里把它的端口改为11009:Connector className="org. apache. coyote. tomcat4. Coyote Connector "port="11009min Processors="5"maxProcessors= 75 enablelookups="true" redirectPort=8443Tomcat性能调优指导于册摩卡软件acceptCount="10"debug=o"connection Timeout=20000"useURIValidation Hack=" falseprotocolHandler ClassName="org. apache /k server. kCoyoteHandler"/>接着配置需要集群支持的 webapp(比如 examples)的 context,添加如下 manager: 注意 protocolStack的值必须在一行内写完。配置第二个 tomcat把已经配好的第一个 tomcat复制一份,形成第个 tomcat,假设路径为d:/ tomcat2。修改D:/ Tomcat2/conf/jk2. properties,设置j2 connector的端凵12009,整个文件内容如下#+十+十+++++++++channelSocket. port=12009#+十十十十+十十++十十+修改 server.conf,有了第一个 tomcat的配置我们只需修改 server. conf的 tomcat停止指令监听端凵:收为10/13
用户评论