tomcat性能优化.docx

上传人:b****1 文档编号:14053085 上传时间:2023-06-20 格式:DOCX 页数:14 大小:61.28KB
下载 相关 举报
tomcat性能优化.docx_第1页
第1页 / 共14页
tomcat性能优化.docx_第2页
第2页 / 共14页
tomcat性能优化.docx_第3页
第3页 / 共14页
tomcat性能优化.docx_第4页
第4页 / 共14页
tomcat性能优化.docx_第5页
第5页 / 共14页
tomcat性能优化.docx_第6页
第6页 / 共14页
tomcat性能优化.docx_第7页
第7页 / 共14页
tomcat性能优化.docx_第8页
第8页 / 共14页
tomcat性能优化.docx_第9页
第9页 / 共14页
tomcat性能优化.docx_第10页
第10页 / 共14页
tomcat性能优化.docx_第11页
第11页 / 共14页
tomcat性能优化.docx_第12页
第12页 / 共14页
tomcat性能优化.docx_第13页
第13页 / 共14页
tomcat性能优化.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

tomcat性能优化.docx

《tomcat性能优化.docx》由会员分享,可在线阅读,更多相关《tomcat性能优化.docx(14页珍藏版)》请在冰点文库上搜索。

tomcat性能优化.docx

tomcat性能优化

一、总结前一天的学习

从“第三天〞的性能测试一节中,我们得知了决定性能测试的几个重要指标,它们是:

ü  吞吐量

ü  Responsetime

ü  Cpuload

ü  MemoryUsage

我们也在第三天的学习中对Apache做过了一定的优化,使其最优化上述4大核心指标的读数,那么我们的Apache调优了,我们的Tomcat也作些相应的调整,当完成今的课程后,到时你的“小猫〞到时真的会“飞〞起来的,所以请用心看完,这篇文章一方面用来向那位曾写过“Tomcat如何承受1000个用户〞的作都的敬,一方面又是这篇原文的一个扩展,因为在把原文的知识用到相关的两个大工程中去后解决了:

1)      承受更大并发用户数

2)      取得了良好的性能与改善〔系统平均性能提升达20倍,极端一个交易达80倍〕。

另外值的一提的是,我们当时工程里用的“小猫〞是跑在32位机下的,也就是我们的JVM最大受到2GB存的限制,都已经跑成“飞〞了。

如果在64位机下跑这头“小猫〞。

大家可想而知,会得到什么样的效果呢?

下面就请请详细的设置吧!

 

二、一切基于JVM〔存〕的优化

2.132位操作系统与64位操作系统中JVM的比照

我们一般的开发人员,根本用的是都是32位的Windows系统,这就导致了一个严重的问题即:

32位windows系统对存限制,下面先来看一个比拟的表格:

Winxp

32

4GB

超级兔子

Win7

32

4GB

可以通过设置/PAE

Win2003

32

可以突破4GB达16GB

必需要装win2003advancedserver且要打上sp2补丁

Win7

64

无限制

机器能插多少存,系统存就能支持到多大

Win2003

64

无限制

机器能插多少存,系统存就能支持到多大

Linux

64

无限制

机器能插多少存,系统存就能支持到多大

Unix

64

无限制

机器能插多少存,系统存就能支持到多大

上述问题解决后,我们又碰到一个新的问题,32位系统下JVM对存的限制:

不能突破2GB存,即使你在Win2003AdvancedServer下你的机器装有8GB-16GB的存,而你的JAVA,只能用到2GB的存。

其实我一直很想推荐大家使用Linux或者是Mac操作系统的,而且要装64位,因为必竟我们是开发用的不是打游戏用的,而Java源自Unix归于Unix〔Linux只是运行在PC上的Unix而己〕。

所以很多开发人员运行在win32位系统上更有甚者在生产环境下都会布署win32位的系统,那么这时你的Tomcat要优化,就要讲究点技巧了。

而在64位操作系统上无论是系统存还是JVM都没有受到2GB这样的限制。

Tomcat的优化分成两块:

ü  Tomcat启动命令行中的优化参数即JVM优化

ü  Tomcat容器自身参数的优化〔这块很像ApacheServer〕

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

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

需要注意的是:

这边讨论的JVM优化是基于OracleSun的jdk1.6版有以上,其它JDK或者低版本JDK不适用。

2.2Tomcat启动行参数的优化

Tomcat的启动参数位于tomcat的安装目录\bin目录下,如果你是Linux操作系统就是catalina.sh文件,如果你是Windows操作系统那么你需要改动的就是catalina.bat文件。

翻开该文件,一般该文件头部是一堆的由##包裹着的注释文字,找到注释文字的最后一段如:

#$Id:

catalina.sh5227972007-03-2707:

10:

29Zfhanik$

#-----------------------------------------------------------------------------

 

#OSspecificsupport. $var_must_besettoeithertrueorfalse.

敲入一个回车,参加如下的参数

Linux系统中tomcat的启动参数

exportJAVA_OPTS="-server-Xms1400M-Xmx1400M-Xss512k-XX:

+AggressiveOpts-XX:

+UseBiasedLocking-XX:

PermSize=128M-XX:

MaxPermSize=256M-XX:

+DisableExplicitGC-XX:

MaxTenuringThreshold=31-XX:

+UseConcMarkSweepGC-XX:

+UseParNewGC -XX:

+CMSParallelRemarkEnabled-XX:

+UseCMSpactAtFullCollection-XX:

LargePageSizeInBytes=128m -XX:

+UseFastAccessorMethods-XX:

+UseCMSInitiatingOccupancyOnly-Djava.awt.headless=true"

Windows系统中tomcat的启动参数

setJAVA_OPTS=-server-Xms1400M-Xmx1400M-Xss512k-XX:

+AggressiveOpts-XX:

+UseBiasedLocking-XX:

PermSize=128M-XX:

MaxPermSize=256M-XX:

+DisableExplicitGC-XX:

MaxTenuringThreshold=31-XX:

+UseConcMarkSweepGC-XX:

+UseParNewGC -XX:

+CMSParallelRemarkEnabled-XX:

+UseCMSpactAtFullCollection-XX:

LargePageSizeInBytes=128m -XX:

+UseFastAccessorMethods-XX:

+UseCMSInitiatingOccupancyOnly-Djava.awt.headless=true

上面参数好多啊,可能有人写到现在都没见一个tomcat的启动命令里加了这么多参数,当然,这些参数只是我机器上的,不一定适合你,尤其是参数后的value〔值〕是需要根据你自己的实际情况来设置的。

参数解释:

ü  -server

我不管你什么理由,只要你的tomcat是运行在生产环境中的,这个参数必须给我加上

因为tomcat默认是以一种叫java–client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着你的tomcat以server模式运行时将拥有:

更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量。

更。

还有更。

Y给我记住啊,要不然这个-server都不加,那是要打屁股了。

ü  -Xms–Xmx

即JVM存设置了,把Xms与Xmx两个值设成一样是最优的做法,有人说Xms为最小值,Xmx为最大值不是挺好的,这样设置还比拟人性化,科学化。

人性?

科学?

你个头啊。

大家想一下这样的场景:

一个系统随着并发数越来越高,它的存使用情况逐步上升,上升到最高点不能上升了,开场回落,你们不要认为这个回落就是好事情,由其是大起大落,在存回落时它付出的代价是CPU高速开场运转进展垃圾回收,此时严重的甚至会造成你的系统出现“卡壳〞就是你在好好的操作,突然网页像死在那边一样几秒甚至十几秒时间,因为JVM正在进展垃圾回收。

因此一开场我们就把这两个设成一样,使得Tomcat在启动时就为最大化参数充分利用系统的效率,这个道理和jdbcconnectionpool里的minpoolsize与maxpoolsize的需要设成一个数量是一样的原理。

如何知道我的JVM能够使用最大值啊?

拍脑袋?

不行!

在设这个最大存即Xmx值时请先翻开一个命令行,键入如下的命令:

看,能够正常显示JDK的版本信息,说明,这个值你能够用。

不是说32位系统下最高能够使用2GB存吗?

即:

2048m,我们不防来试试

可以吗?

不可以!

不要说2048m呢,我们小一点,试试1700m如何

嘿嘿,连1700m都不可以,更不要说2048m了呢,2048m只是一个理论数值,这样说吧我这边有几台机器,有的机器-Xmx1800都没问题,有的机器最高只能到-Xmx1500m。

因此在设这个-Xms与-Xmx值时一定一定记得先这样测试一下,要不然直接加在tomcat启动命令行中你的tomcat就再也起不来了,要飞是飞不了,直接成了一只瘟猫了。

ü  –Xmn

设置年轻代大小为512m。

整个堆大小=年轻代大小+年老代大小+持久代大小。

持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。

此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

ü  -Xss

是指设定每个线程的堆栈大小。

这个就要依据你的程序,看一个线程大约需要占用多少存,可能会有多少线程同时运行等。

一般不易设置超过1M,要不然容易出现outofmemory。

ü  -XX:

+AggressiveOpts

作用如其名〔aggressive〕,启用这个参数,那么每当JDK版本升级时,你的JVM都会使用最新参加的优化技术〔如果有的话〕

ü  -XX:

+UseBiasedLocking

启用一个优化了的线程锁,我们知道在我们的appserver,每个请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver对线程处理自动进展最优调配。

ü  -XX:

PermSize=128M-XX:

MaxPermSize=256M

JVM使用-XX:

PermSize设置非堆存初始值,默认是物理存的1/64;

在数据量的很大的文件导出时,一定要把这两个值设置上,否那么会出现存溢出的错误。

由XX:

MaxPermSize设置最大非堆存的大小,默认是物理存的1/4。

那么,如果是物理存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代存初始大小;

四分之一是1024MB,这就是MaxPermSize默认大小。

ü  -XX:

+DisableExplicitGC

在程序代码中不允许有显示的调用〞System.gc()〞。

看到过有两个极品工程中每次在DAO操作完毕时手动调用System.gc()一下,觉得这样做好似能够解决它们的outofmemory问题一样,付出的代价就是系统响应时间严重降低,就和我在关于Xms,Xmx里的解释的原理一样,这样去调用GC导致系统的JVM大起大落,性能不到什么地方去哟!

ü  -XX:

+UseParNewGC

对年轻代采用多线程并行回收,这样收得快。

ü  -XX:

+UseConcMarkSweepGC

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

我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMSGC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比方说使用了CMSGC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。

ü  -XX:

MaxTenuringThreshold

设置垃圾最大年龄。

如果设置为0的话,那么年轻代对象不经过Survivor区,直接进入年老代。

对于年老代比拟多的应用,可以提高效率。

如果将此值设置为一个较大值,那么年轻代对象会在Survivor区进展屡次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。

这个值的设置是根据本地的jprofiler监控后得到的一个理想的值,不能一概而论原搬照抄。

ü  -XX:

+CMSParallelRemarkEnabled

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

ü  -XX:

+UseCMSpactAtFullCollection

在使用concurrentgc的情况下,防止memoryfragmention,对liveobject进展整理,使memory碎片减少。

ü  -XX:

LargePageSizeInBytes

指定Javaheap的分页页面大小

ü  -XX:

+UseFastAccessorMethods

get,set方法转本钱地代码

ü  -XX:

+UseCMSInitiatingOccupancyOnly

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

ü  -XX:

CMSInitiatingOccupancyFraction=70

CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,根本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotionfailed。

在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开场执行对年老代的并发垃圾回收〔CMS〕,这时还剩10%的空间是5488*10%=548兆,所以即使Xmn〔也就是年轻代共512兆〕里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满足上面的公式,就不会出现垃圾回收时的promotionfailed;

因此这个参数的设置必须与Xmn关联在一起。

ü  -Djava.awt.headless=true

这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:

jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的appserver在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下列图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。

上述这样的配置,根本上可以到达:

ü  系统响应时间增快

ü  JVM回收速度增快同时又不影响系统的响应率

ü  JVM存最大化利用

ü  线程阻塞情况最小化

2.3Tomcat容器的优化

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

还记得我们在第三天的学习中说的,这个系统本身可以处理1000,你没有优化和配置导致它默认只能处理25。

因此下面我们来看Tomcat容器的优化。

翻开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"

                                              pression="on"pressionMinSize="2048"

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

              redirectPort="8443"

/>

好大一陀唉。

没关系,一个个来解释

ü  URIEncoding=〞UTF-8〞

使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

ü  maxSpareThreads

maxSpareThreads的意思就是如果空闲状态的线程数多于设置的数目,那么将这些线程中止,减少这个池中的线程总数。

ü  minSpareThreads

最小备用线程数,tomcat启动时的初始化的线程数。

ü  enableLookups

这个成效和Apache中的HostnameLookups一样,设为关闭。

ü  connectionTimeout

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

ü  maxThreads

maxThreadsTomcat使用线程来处理接收的每个请求。

这个值表示Tomcat可创立的最大的线程数,即最大并发数。

ü  acceptCount

acceptCount是当线程数到达maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuseconnection

ü  maxProcessors与minProcessors

在Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。

它们共享一样的地址空间。

多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而承受更多的请求。

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

ü  useURIValidationHack

我们来看一下tomcat中的一段源码:

security

       if(connector.getUseURIValidationHack()){

           Stringuri=validate(request.getRequestURI());

           if(uri==null){

               res.setStatus(400);

               res.setMessage("InvalidURI");

               thrownewIOException("InvalidURI");

           }else{

               req.requestURI().setString(uri);

               //RedoingtheURIdecoding

               req.decodedURI().duplicate(req.requestURI());

               req.getURLDecoder().convert(req.decodedURI(),true);

           }

       }

可以看到如果把useURIValidationHack设成"false",可以减少它对一些url的不必要的检查从而减省开销。

ü  enableLookups="false"

为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。

ü  disableUploadTimeout

类似于Apache中的keeyalive一样

ü  给Tomcat配置gzip压缩(压缩)功能

pression="on"pressionMinSize="2048"            

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

压缩可以大大提高浏览的速度,它的原理是,在客户端请求网页后,从效劳器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。

相对于普通的浏览过程HTML,CSS,Javascript,Text,它可以节省40%左右的流量。

更为重要的是,它可以对动态生成的,包括CGI、PHP,JSP,ASP,Servlet,SHTML等输出的网页也能进展压缩,压缩效率惊人。

1)pression="on"翻开压缩功能

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

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

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

最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走s协议的话,我们将会用到8443端口这个段的配置,对吧?

--enabletomcatssl-->

   

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

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

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

         useURIValidationHack="false"

                   pression="on"pressionMinSize="2048"

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

              SSLEnabled="true"

          scheme="s"secure="true"

          clientAu

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2