.tomcat优化方向


要优化调整tomcat,首先要知道决定性能的几个重要指标

1.吞吐量

2.Responsettime(响应时间)

3.Cpuloadcpu负载)

4.MemoryUsage(内存占用)

通过对tomcat的各种配置的调整,使其最优化上面4个核心指标的读数。解决了以下2点:

1)      承受更大并发用户数

2)      取得了良好的性能与改善


二.tomcat优化步骤

Tomcat的优化分成两块:

1.Tomcat启动命令行中的优化参数即JVM优化。

2.Tomcat容器自身参数的优化。

这一节先要讲的是Tomcat启动命令行中的优化参数。

Tomcat首先跑在JVM之上的,因为它的启动其实也只是一个java命令行,首先我们需要对这个JAVA的启动命令行进行调优。


三.Tomcat启动行参数的优化

Tomcat的启动行参数位于tomcat安装目录的bin文件夹下。在windows中文catalina.bat 。文件在linux系统下为catalina.sh文件。打开该文件,开头一般都是一堆注释文字。在其末尾处加入如下参数

Linux系统的tomcat启动参数


export JAVA_OPTS="-server -Xms1400M -Xmx1400M –Xmn512m-Xss512k-XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M-XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31-XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly-Djava.awt.headless=true "

有些参数需要根据机器情况来填写相应的值下面


参数说明:

-server

Tomcat运行在生产环境中必加的选项,以server模式运行


-Xms –Xmx

JVM的内存设置,将两个值设置成一样是最优化配置。设置最大值时用命令 java –Xmx1500m–version 来试试限制。能正常显示版本信息则为正常


-Xmn

设置年轻代的大小整个堆大小=年轻代大小+年老代大小+持久代大小。持久代一般固定64M 所以增大年轻大后,会减少年老代大小,对系统性能影响较大,官方推荐为整个堆的3/8.

-Xss

设置每个线程的堆栈大小,一般不要超过1M,要不然容易内存溢出


-XX :+AggressiveOpts

-    加入JDK动态升级,当JDK升级时tomcat也能获得最新技术的支持


XX :+UseBiasedLocking

启用一个优化的线程锁,使得appserver对内线程处理自动进行最优调配


-XX :PermSize=128M –XX:MaxPermSize=256M

Permsize设置非堆内存初始值,一般为物理内存的1/64

MaxPermSize设置最大非堆内存值,一般为物理内存的1/4

在数据量很大的文件导出时的必设项,否则可能导致内存溢出


-XX:+DisableExpllicitGC

在程序代码中不允许有显示的调用System.gc(),避免其导致的Full GC造成的JVM大起大落


-XX:+UseParNewGC

对年轻代采取多线程并行回收,加快回收速度


-XX:+UseConcMarkSweepGC

即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。

我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,


-XX:MaxTenuringThreshold

设置垃圾最大年龄,设置为0的话,则年轻代不经过Survivor区,直接变为年老代,设置较大的值的话,可以增加对象在年轻代即回收的概率。具体值根据实际来设置


-XX:+CMSParallelRemarkEnabled

在使用UseParNewGC的情况下尽量减少Mark时间


-XX:+UseCMSCompactAtFullCollection

在使用concurrent gc 的情况下, 防止memoryfragmention, live object 进行整理, 使 memory 碎片减少。


-XX:+LargePageSizelnBytes=128m

指定 Java heap的分页页面的大小


-XX:+UseFastAccessorMethods

Get set 方法转成本地代码


-XX:+UseCMSlnitiatingOccupancyOnly

指示只有在oldgeneration在使用了初始化比例后concurrent collector启动收集


-


-Djava.awt.headless=true

这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。



上述的配置基本可以达到

1.系统响应时间增快

2.Jvm回收速度增快同时又不影响系统响应时间

3.Jvm内存最大化利用

4.线程阻塞情况最小化


四.Tomcat容器内的优化

前面对Tomcat启动时的命令进行了优化增加了系统JVM的可使用数,垃圾回收效率与线程阻塞情况,增加了系统响应效率等。还有一个很重要的指标没有优化——吞吐量。

打开tomcat安装目录/conf/server.xml后找到如下一行

这一行就是tomcat容器性能参数设置的地方,一般会有一个默认值,这些默认值是远远不够我们使用的。因此需要做如下的修改

        URIEncoding="UTF-8"  minSpareThreads="25"maxSpareThreads="75"

        enableLookups="false" disableUploadTimeout="true"connectionTimeout="20000"

        acceptCount="300"  maxThreads="300"maxProcessors="1000" minProcessors="5"

        useURIValidationHack="false"

                                             compression="on" compressionMinSize="2048"

                                             compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

             redirectPort="8443"

/>


参数说明

URIEncoding=UTF-8

使得tomcat可以解析含有中文名的文件的url


maxSpareThreads=75

空闲状态的线程数多于设置的数目,则将这些线程终止,减少这个池中的线程总数


minSpareThreads=”25”

最小备用线程数。Tomcat启动时的初始线程数。


EnableLookups=false

DNS寻找,设为关闭。


ConnectionTimeout=20000

为网络连接超时时间毫秒数


acceptCount=300

是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这里设置的就是队列大小,如果这个也满了,就直接拒绝连接。


maxthreads=300

tomcat使用线程来处理接收数据的最大线程,即最大并发数。


maxProcessors=1000mincessors=5

在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

通常Windows是1000个左右,Linux是2000个左右。





useURIValidationHack=false

可以减少对url的一些不必要的检查以减少开销。



tomcat配置http压缩功能

HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript, Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGIPHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。


1)compression="on"打开压缩功能

2)compressionMinSize="2048"启用压缩的输出内容大小,这里面默认为2KB

3)noCompressionUserAgents="gozilla,traviata" 对于以下的浏览器,不启用压缩

4)compressableMimeType="text/html,text/xml" 压缩类型



最后如果需要利用到https的话在可以在3端口也加上同样的配置。