其神若何,月射寒江。

Tomcat调优

上一篇 / 下一篇  2009-12-16 21:39:37 / 个人分类:性能测试

Tomcat调优

一、 控制线程数server.xml

l        >>web server允许的最大连接数还受制于操作系统的内核参数设置,

通常Windows2000个左右,Linux1000个左右。

 

l        线程数参数含义

minProcessors    务器启动时创建的处理请求的线程数

maxProcessors     最大可以创建的处理请求的线程数

acceptCount       指定当所有可以使用的处理请求的线程数都被使用时,

                 可以放到处理队列中的请求数,超过这个数的请求将不予处理

connnectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

 

Tomcat 5的线程数目参数修改为:

minSpareThreads  Tomcat初始化时创建的线程数。

maxSpareThreads  一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

 

 

 

 

调整该参数为最优Processors,在限制的情况下会发挥不了最大连接数目

本机TOMCAT4.1测试的时候,50个用户,100个线程的情况是最优的,在点击数\响应时间\并发用户数都为最好

maxProcessors50,情况会出现连接不够用的情况,200出现内存溢出

 

 

Tomcat4中可以通过修改minProcessorsmaxProcessors的值来控制线程数。这些值在安装后就已经设定为默认值并且是足够使用的,但是随着站点的扩容而改大这些值。

minProcessors服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是说,如果一天内每秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程数,指定为参数maxProcessors的值。

maxProcessors的值也是有上限的,应防止流量不可控制(或者恶意的服务攻击),

从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数,应同时加大这两个参数。

web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows2000个左右,Linux1000个左右。

 二、设置TOMCAT启动内存

l        启动JAVA启动内存参数

-Xms JVM初始化堆的大小

-Xmx  JVM堆的最大值

l        Tomcat修改启动内存的地方

catalina.bat中修改变量,JAVA_OPTS=-Xms500m-Xmx500m

l        一般把-Xms-Xmx设为一样大

l        一般建议堆的最大值设置为可用内存的最大值的80%,1024M一般够了

l        堆大小必须合适

如果堆设置较大,则GC数变少,但每次花费较长时间,从而导致系统处理能力抖动较大;如果堆设置较小,则GC变得频繁,虽然对系统性能影响较小,但频繁的GC也会耗费系统资源

 

这两个值的大小一般根据需要进行设置。

初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。

一般而言,这个参数不重要。但是有的应用程序在大负载的情况下会急剧地占用更多的内存,

此时这个参数就是显得非常重要,如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,

虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms-Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。

一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。

当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%

Jvm系统垃圾收集机制的存在,在高负载情况下如果能根据系统的具体要求有效的调整最优化堆的大小,也可以起到一定优化作用。如果堆设置较大,则GC数变少,但每次花费较长时间,从而导致系统处理能力抖动较大;如果堆设置较小,则GC变得频繁,虽然对系统性能影响较小,但频繁的GC也会耗费系统资源。

三、负载均衡

 

负载均衡实现的方式大概有四种:

第一是通过DNS,但只能实现简单的轮流分配,不能处理故障,

第二如果是基于MS IISWindows 2003 server本身就带了负载均衡服务,

第三是硬件方式,通过交换机的功能或专门的负载均衡设备可以实现,

第四种是软件方式,通过一台负载均衡服务器进行,上面安装软件

  使用Apache Httpd Server做负载平衡器,Tomcat集群节点使用Tomcat就可以做到以上第四种方式。

 这种方式比较灵活,成本相对也较低。另外一个很大的优点就是可以根据应用的情况和服务器的情况采取一些策略。

 

四、 预编译

l        使用Jikes

Jikes是性能优良的Java编译器,在jsp容器中使用Jikes替代Sun的编译器能够有效提高jsp文件的编译速度。对于Tomcat 5.5,可以参考Jasper-Howto。要注意的是Windows版本的Jikes是不支持-encoding选项的,你需要自己编译。可以参考这里。

 

l        Ant进行预编译

Tomcat官方推荐的部署方式是使用Antjsp进行预编译。直接在部署时将jsp编译为servlet类,能够在运行初期时显著提高响应速度

TAG:

 

评分:0

我来说两句

xiaohanjiang

xiaohanjiang

River.liu又名小寒江。曾经从事多年JAVA软件开发工作,这几年一直从事软件测试工作。多年来,一直致力于软件工程、软件开发、软件测试方面的研究。不喜欢自称高手,不愿意自封资深;科学研究讲究的是务实、实践。真理、真知才是硬道理。茫茫海洋,我只希望我的每个理念能游弋于业界之间。我的思想能在你的脑海中徜徉。

日历

« 2024-04-28  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 39889
  • 日志数: 52
  • 建立时间: 2009-12-15
  • 更新时间: 2011-03-14

RSS订阅

Open Toolbar