tomcat性能优化
tomcat 性能调优方案一、操作系统调优对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU 的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU 的处理能
tomcat 性能调优方案
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU 的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU 的处理能力越强,系统运行速度越快。。
【适用场景】 任何项目。
二、Java 虚拟机调优
应该选择SUN 的JVM ,在满足项目需要的前提下,尽量选用版本较高的JVM ,一般来说高版本产品在速度和效率上比低版本会有改进。
JDK1.4比JDK1.3性能提高了近10-20,JDK1.5比JDK1.4性能提高25-75。
因此对性能要求较高的情况推荐使用 JDK1.6。
【适用场景】 任何项目。
三、Apache 集成Tomcat
Web 服务器专门处理HTTP 请求,应用服务器是通过很多协议为应用提供商业逻辑。虽然Tomcat 也可以作web 服务器,但其处理静态html 的速度比不上Apache ,且其作为web 服务器的功能远不如Apache ,因此把Apache 和Tomcat 集成起来,将html 和Jsp 的功能部分进行明确分工,让Tomcat 只处理Jsp 部分,其他的由Apache ,IIS 等web 服务器去处理,由此大大提高Tomcat 的运行效率。
如果一个项目中大量使用了静态页面、大量的图片等,并有有较大的访问量,推荐使用Apache 集成Tomcat 的方式来提高系统的整体性能。
Apache 和Tomcat 的整合有三种方式,分别是JK 、http_proxy和ajp_proxy.其中JK 方式是最常见的方式,JK 本身有两个版本分别是1和2,目前1最新版本是
1.2.8,而版本2早已经废弃了。http_proxy是利用Apache 自带的mod_proxy模块使用代理技术来连接Tomcat 。Ajp_proxy连接方式其实跟http_proxy方式一样,都是由mod_proxy所提供的功能。只需要把配置中的http://换成ajp://,同时连接的是Tomcat 的AJP Connector所在的端口。
相对于JK 的连接方式,后两种在配置上比较简单的,灵活性方面也一点都不逊色。但就稳定性而言不像JK 这样久经考验,所以建议采用JK 的连接方式。 Apache JK Tomcat配置:
使用到的两个配置文件分别是:httpd.conf 和mod_jk.conf。其中httpd.conf 是Apache 服务器的配置文件,用来加载JK 模块以及指定JK 配置文件信息。mod_jk.conf是到Tomcat 服务器的连接定义文件。
【部署步骤】
1. 安装Apache 服务器
2. 部署Tomcat
3. 将mod_jk.so拷贝到modules 目录下面
,4. 修改httpd.conf 和mod_jk.conf
【适用场景】 大量使用静态页面的应用系统。
四、Apache 和Tomcat 集群
对于并发要求很高的系统,我们需要采取负载均衡的方式来分担Tomcat 服务器的压力。负载均衡实现大概有四种:第一是通过DNS ,但只能简单的实现轮流分配,不能处理故障;第二是基于MS IIS,windows 2003 server本身就带了负载均衡服务;第三是硬件方式,通过交换机功能或专门的负载均衡设备来实现;第四种是软件的方式,通过一台负载均衡服务器进行,上面安装软件。使用Apache Httpd Server做负载均衡器,Tomcat 集群节点使用Tomcat 就可以做到上述第四种方式,这种方式比较灵活,成本相对比较低,另外一个很大的优点就是可以根据应用情况和服务器的情况做一些灵活的配置。所以推荐使用Apache Tomcat集群来实现负载均衡。
采用Tomcat 集群可以最大程度的发挥服务器的性能,可以在配置较高的服务器上部署多个Tomcat ,也可以在多台服务器上分别部署Tomcat ,Apache 和Tomcat 整合的方式还是JK 方式。经过验证,系统对大用户量使用的响应方面,Apache 3Tomccat集群> Apache 2Tomcat集群 > Apache集成Tomcat > 单个Tomcat 。并且采用Apache 多Tomcat 集群的部署方式时,如果一个Tomcat 出现宕机,系统可以继续使用,所以在硬件系统性能足够优越的情况下,需要尽量发挥软件的性能,可以采用增加Tomcat 集群的方式。
Apache Tomcat集群的方式使用到得配置文件有httpd.conf 、mod_jk.conf、workers.properties 。其中mod_jk.conf是对JK 信息的配置,包括JK 的路径等,workers.properties 配置文件是对Tomcat 服务器的连接定义文件。
Apache 需要调整运行参数,这样才能构建一个适合相应网络环境的web 服务。其中可进行的优化配置如下:
1. 设置MPM (Multi Processing Modules多道处理模块)。ThreadPerChild, 这个参数用于设置每个进程的线程数,在Windows 环境下默认值是64,最大值是1920,建议设置为100-500之间,服务器性能高的话值大一些,反之小一些。MaxRequestPerChild 表示每个子进程能够处理的最大请求数。这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为很大的参数,否则设置一个较小的值,建议值是3000.
2. 关闭DNS 和名字解析 HostnameLookups off
3. 打开UseCanonicalName 模块 UseCanonicalName on
4. 关闭多余模块 一般来说,不需要加载的模块有,mod_include.so、mod_autoindex.so、mod_access.so、mod_auth.so.
5. 打开KeepAlive 支持
KeepAlive on, KeepAliveTimeout 15 MaxKeepAliveRequests 1000
根据实际经验,通过Apache 和Tomcat 集群的方式提高系统性能的效果十分明显,这种方式可以最大化的利用硬件资源,通过多个Tomcat 的处理来分担单Tomcat 时的压力。
【部署步骤】
,1. 安装Apache 服务器
2. 部署Tomcat 集群,即多个相同的Tomcat 。
3. 将mod_jk.so拷贝到modules 目录下面
4. 修改httpd.conf 、mod_jk.conf和workers.properties
【适用场景】 并发用户量及在线使用用户数量比较高的系统。
五、Tomcat 自身优化
1. JVM参数调优:-Xms
2. 禁用DNS 查询
当web 应用程序向要记录客户端的信息时,它也会记录客户端的IP 地址或者通过域名服务器查找机器名转换为IP 地址。DNS 查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP 的过程,这样会消耗一定的时间。为了消除DNS 查询对性能的影响我们可以关闭DNS 查询,方式是修改server .xml 文件中的enableLookups 参数值:
Tomcat4
Tomcat5 3. 调整线程数 通过应用程序的连接器(Connector )进行性能控制的的参数是创建的处理请求的线程数。Tomcat 使用线程池加速响应速度来处理请求。在Java 中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU 最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。 className="org.apache.coyote.tomcat4.CoyoteConnector" port="80" minProcessors="5" maxProcessors="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true" /> Tomcat4中可以通过修改minProcessors 和maxProcessors 的值来控制线程数。这些值在安装后就已经设定为默认值并且是足够使用的,但是随着站点的扩容而改大这些值。minProcessors 服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是说,如果一天内每秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程数,指定为参数maxProcessors 的值。maxProcessors 的值也是有上限的,应防止流量不可控制(或者恶意的服务攻击),从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows 是2000个左右,Linux 是1000个左右。 在Tomcat5对这些参数进行了调整,请看下面属性: maxThreads Tomcat 使用线程来处理接收的每个请求。这个值表示Tomcat 可创建的最大的线程数。 acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。 connnectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。 minSpareThreads Tomcat 初始化时创建的线程数。 maxSpareThreads 一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的socket 线程。 最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是所有人的web 站点的流量都是一样的,因此没有一刀切的方案来确定线程数的值。 六、APR 库使用 Tomcat 中使用APR 库,其实就是在Tomcat 中使用JNI 的方式来读取文件以及进行网络传输。可以大大提升Tomcat 对静态文件的处理性能,同时如果你使用了HTTPS 方式传输的话,也可以提升SSL 的处理性能。 一般在Windows 下,可以直接下载编译好的二进制版本的dll 库文件来使Tomcat 启用APR ,一般建议拷贝库文件tcnative-1.dll 到Tomcat 的bin 目录下。而在Linux 下,可以直接解压和安装bin 目录下的tomcat_native.tar.gz 文件,编译之前要确保apr 库已经安装。 怎么才能判断Tomcat 是否已经启用了APR 库呢?方法是通过看Tomcat 的启动日志: 如果没有启用APR ,则启动日志一般有这么一条: org.apache.coyote.http11.Http11Protocol start 如果启用了APR ,则这条日志就会变成: org.apache.coyote.http11.Http11AprProtocol start tcnative-1.dll 下载地址:http://tomcat.heanet.ie/native/ 调优综述 根据以上分析,如果想要Tomcat 达到最优的效果,首先要争取使得操作系统以及网络资源达到最优,并且最好使用高版本的JDK 。对于有大量静态页面的系统,采用Apache 集成Tomcat 的方式,把静态页面交由Apache 处理,动态部分交由Tomcat 处理,能极大解放Tomcat 的处理能力。使用ARP 库也能极大的提高Tomcat 对静态文件的处理能力。对于并发要求较高的系统,采用Apache 加Tomcat 集群的方式,将负载分别分担到多个Tomcat 上,能很大的提高系统的性能,充分利用硬件资源。同时需要对Tomcat 自身进行优化,包括增大内存、调节并发线程数等。