优化Tomcat6

优化Tomcat6

1.内存优化其实也就是对JVM内存进行设置

配置位置:%TOMCAT_HOME%/bin下,
Window:catalina.bat
Linux/Unix:catalina.sh
首行添加:JAVA_OPTS=-Xms256m –Xmx256m
注意:Linux环境下:JAVA_OPTS=”-Xms256m –Xmx256m”,即参数要加引号,不然不起作用

以下值大部分情况为默认值,应根据具体服务器硬件配置及业务特性来配置
-Xverify:none关闭大部分类验证措施,以缩短虚拟机类加载时间
-Xms16m 堆内存初始值 (M>1G ? 1G/64 : M/64)
-Xmx256m 堆内存最大值 (M>1G ? 1G/4 : M/4)
-Xmn4m 新生代初始值 (迸发收集器下通过该值来设置,该设置优先级高于-XX:NewRatio)
-XX:NewRatio=2 老年代与新生代比值(迸发收集器下默认=7)
-XX:SurvivorRatio=8 Eden区与Survivro区的比值
-XX:PermSize=12m 永久代初始值
-XX:MaxPermSize=64m 永久代最大值
-Xss1024k 栈内存大小
-XX:MaxTenuringThreshold=15 由年轻代到年老带的GC阀值(迸发收集器下默认=4)
-XX:+UseFastAccessorMethods get,set 方法转成本地代码

2.优化线程池

配置位置:%TOMCAT_HOME%/conf下,
server.xml文件

[html] view plaincopy在CODE上查看代码片派生到我的代码片

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"   
        maxThreads="2000" minSpareThreads="500"/>   

name:线程池名称,必须唯一
namePrefix:线程池创建线程的名称前缀,线程名称一般为namePrefix+ threadNumber
maxThreads:线程池存活的最大线程数,默认值为200
minSpareThreads:线程池初始线程数(保持活跃的最小线程数),默认值为25
一般只需要配置maxThreads和minSpareThreads即可
具体其余参数可参考:%TOMCAT_HOME%\webapps\docs\ config\executor.html

[html] view plaincopy在CODE上查看代码片派生到我的代码片

<Connector executor="tomcatThreadPool"  
           port="8080" protocol="HTTP/1.1"   
           connectionTimeout="20000"   
           redirectPort="8443"   
  acceptCount="1024"  
  compression="on"/>  

acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
enableLookups:是否反查域名,取值为:true或false。 缺省值为false表示使用客户端主机名的DNS解析功能,被ServletRequest.getRemoteHost方法调用。
compression:压缩传输,取值on/off/force,默认值off?
具体其余参数可参考:%TOMCAT_HOME%\webapps\docs\ config\http.html

3.优化Mysql

MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看

mysql> show variables like ‘max_connections’;

进入

C:\Program Files (x86)\MySQL\MySQL Server 5.0\my.ini 修改最大连接数为1024

max_connections=1024

4.优化DBCP
1.精简Tomcat和配置文件

1.删除不需要的管理应用和帮助应用,提高tomcat安全性。

删除webapps下所有文件

rm –fr $CATALINA_HOME/webapps/*

删除server/wenapps下所有文件

rm –fr $CATALINA_HOME/server/webapps/*

2.精简sever.xml配置文件

使用tomcat发布版本中的最小配置文件,提高性能,如果有功能上的需求,在逐个的加入功能配置。

备份原来的server.xml为server.xml_bak

mv server.xml server.xml_bak

复制server-minimal.xml为server.xml

cp server-minimal.xml server.xml

2.连接器优化

在$CATALINA_HOME/conf/server.xml配置文件中的Connetctor节点,和连接数相关的参数配置和优化。

maxThreads

Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值200。 可以根据机器的时期性能和内存大小调整,一般可以在400-500。最大可以在800左右。

acceptCount

  指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。
minSpareThreads
Tomcat初始化时创建的线程数。默认值4。

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

enableLookups

是否反查域名,默认值为true。为了提高处理能力,应设置为false

connnectionTimeout

网络连接超时,默认值20000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。(本系统由于与后台系统接口超时时间较长,使用设置为60000)
maxKeepAliveRequests

保持请求数量,默认值100。
bufferSize
输入流缓冲大小,默认值2048 bytes。

compression

压缩传输,取值on/off/force,默认值off。

其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

Tomcat中如何禁止和允许列目录下的文件

在$CATALINA_HOME/conf/web.xml中,把listings参数设置成false即可,如下:

    listings
    false

    …

修改用于AJP的连接:

为:

<Connector port="8009"
         maxTreads="500"
         minSpareThreads="10"
         maxSpareThreads="50"
         acceptCount="50"
         connectionTimeout="60000"
         enableLookups="false" 
         redirectPort="8443"
         protocol="AJP/1.3" /> 

修改通用连接:

为:

<Connector port="8080"
           maxTreads="500" 
           minSpareThreads="10"
           maxSpareThreads="50"
           acceptCount="50" 
           connectionTimeout="60000"
           enableLookups="false" 
           redirectPort="8443"
           protocol="AJP/1.3"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgents="gozilla, traviata"
           compressableMimeType="text/html,text/xml"/>

修改主机和应用配置:

为:

 <Host name="localhost" appBase=" "

   unpackWARs="true" autoDeploy="true"

   xmlValidation="false" xmlNamespaceAware="false">

    <Context path="" docBase="/www/xxxx/site/web" reloadable="true" debug="0"/>

  </Host>

3.优化JDK

Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:

JAVA_OPTS=’$JAVA_OPTS -Xms[初始化内存大小] -Xmx[可以使用的最大内存]

设置环境变量:export JAVA_OPTS=”$JAVA_OPTS -Xms[初始化内存大小] -Xmx[可以使用的最大内存]”

一般说来,你应该使用物理内存的 80% 作为堆大小。如果本机上有Apache服务器,可以先折算Apache需要的内存,然后修改堆大小。建议设置为70%;建议设置[[初始化内存大小]等于[可以使用的最大内存],这样可以减少平凡分配堆而降低性能。

本例使用加入环境变量的方式:

vi /etc/profile

加入:export JAVA_OPTS=”$JAVA_OPTS -Xms700 –Xmx700

source /etc/profile

5.其余优化

5.1启用NIO

[html] view plaincopy在CODE上查看代码片派生到我的代码片

<Connector port="8080" protocol="HTTP/1.1"   
     connectionTimeout="20000"   
     redirectPort="8443" />   

修改为

[html] view plaincopy在CODE上查看代码片派生到我的代码片

<ConnectorportConnectorport="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"   
     connectionTimeout="20000"   
     redirectPort="8443" />   

5.2调整文件打开数

单进程文件打开数:默认Windows下打开文件数是2000,Linux系统默认打开文件数是1024。
实际的生产环境中(获取图片等,都属于打开文件),这个值总是显得太小,经常会报“too many open files” 等这样的错误
导致系统死掉,所以我们总是要修改该值。
Linux下ulimit –a 可以查看,默认是1024
open files (-n) 1024
vi /etc/profile 加入ulimit -n 65535重新启动,就把linux改成打开文件最大数为65535

5.3精简Tomcat6的配置
删除不需要的一些管理和帮助文件,提高Tomcat的安全性

5.4在web下不显示目录列表
在web.xml中把listings改成false就行了

6.归纳、建议
归纳起来,Tomcat的优化主要涉及:
内存优化:设置相应的JVM内存参数和确定适合应用的垃圾收集器及其参数
线程优化:采用线程池,并配置相应的参数
数据库连接池优化:选择恰当的数据源,设置相应的数据源配置参数
其余优化:启用NIO、调整数据库本身的连接数目限制、调整服务器文件打开数

其余建议:
内存、线程、数据库连接池等必须一起调整,避免其中某一项成为系统瓶颈(往往前端WEB
服务器,如Httpd,Nginx等,后端数据库本身,也需要做一定的配置调整)

服务器尽量采用64位、4CPU、 4G内存及以上硬件
注意:此种情况下,可以采用64位JDK使用大内存,这时,需要控制FULL GC的频率和时间,
尽量做到不需要出现FULL GC或者夜间定时FULL GC,避免FULL GC造成的停顿,或者通过部署
多32位虚拟机来进行逻辑集群,以充分利用服务器硬件资源。

注意根据CPU数目,业务类别来设置垃圾收集器的类别,同时注意控制GC频率

注意内存、线程池、数据库连接池等的配置,不是越大越好

Tomcat内存参数配置建议书写在catalina.bat(catalina.sh)的首行,并且所有参数书写在同一行
Linux下需要给配置参数加引号

猜你喜欢

转载自blog.csdn.net/duck_arrow/article/details/43565987