tomcat优化

在这里插入图片描述
1.Java虚拟机调优

应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。 JDK1.4比JDK1.3性能提高了近10%-20%,JDK1.5比JDK1.4性能提高25%-75%。

2.内存设置 VM参数调优

-Xms 表示JVM初始化堆的大小,-Xmx表示JVM堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。表示初始化内存为256MB,可以使用的最大内存为512MB。

Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:
Java代码 收藏代码
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

一定加在catalina.bat最前面。
Linux环境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:
Java代码 收藏代码
JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

注意:前后二者区别,有无set,有无双引号。

3.HTTP优化配置 server.xml
Java代码 收藏代码
<Connector
port=“8080”

enableLookups="false"  
disableUploadTimeout="true"   
useBodyEncodingForURI="true"   

URIEncoding="UTF-8"  

maxHttpHeaderSize="8192"   
maxThreads="600"   
minSpareThreads="100"   
maxSpareThreads="500"   
acceptCount="700"   
connectionTimeout="20000"   

keepAliveTimeout="15000"  
maxKeepAliveRequests="1"  

compression="on"   
compressionMinSize="2048"   
noCompressionUserAgents="gozilla, traviata"   
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"   
  
redirectPort="8443"   

/>

引用
maxThreads:Tomcat可创建的最大的线程数。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
minSpareThreads:Tomcat初始化时创建的线程数。
maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
connnectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)
maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
disableUploadTimeout - 上传时是否使用超时机制
enableLookups - 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false

3.1禁用DNS查询

当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值为false:

acceptCount>maxThreads>maxSpareThreads>minSpareThreads

这张图说的和上面不一样,maxThreads>acceptCount>maxSpareThreads>minSpareThreads

倾向于后者是对的。

3.2 调整线程数

Tomcat使用线程来处理接收的每个请求,使用线程池加速响应速度来处理请求。

3.3 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,则这条日志就会变成:
Java代码 收藏代码
org.apache.coyote.http11.Http11AprProtocol start

tcnative-1.dll 下载地址:http://tomcat.heanet.ie/native/

3.4 配制gzip压缩

gzip 压缩就是为了提高访问网站的速度,即站点上要传给浏览器的网页内容先进行压缩,然后通过网络传给客户端的浏览器,客户端的浏览器再进行解压,并显示给用户。
引用
compression=“on” 打开压缩功能
compressionMinSize=“2048” 启用压缩的输出内容大小,这里面默认为2KB
noCompressionUserAgents=“gozilla, traviata” 压对于以下的浏览器,不启用缩
compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain”  要压缩的文件类型

通过firebug 可以看到响应头的信息:

加入前:
引用
Server Apache-Coyote/1.1
Content-Type text ml;charset=UTF-8
Content-Length 2063
Date Thu, 05 May 2011 01:35:55 GMT

加入后:
引用
Server Apache-Coyote/1.1
Content-Type text ml;charset=UTF-8
Transfer-Encoding chunked
Content-Encoding gzip
Vary Accept-Encoding
Date Thu, 05 May 2011 01:38:13 GMT

还可以通过在线网站去测试:
引用
http://gzip.iamzz.com/
http://tool.chinaz.com/Gzips/

与内存相关的tomcat错误处理:

内存的永久保存区域不足引起

1.java.lang.OutOfMemoryError:这个错误是因为tomcat JVM的Permanent Generation space(内存的永久保存区域)不足引起的,这个区域是JVM用于用于存放Class和Meta的信息的内存区域,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了,症状是tomcat运行一段时间后失去反应,服务中tomcat服务正常,重启 tomcat服务后网站又正常响应了。解决方案是人工调整确认大小设置,使用regedit修改注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java中的 Options参数,在后面增加一下数据:
引用
-XX:PermSize=64M
-XX:MaxPermSize=128m

JVM堆空间不足

2.java.lang.OutOfMemoryError: Java heap space Heap size 设置 JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。使用前面所说的方法进行调整即可

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
56RW8XYOVr7KfrdtsikRJg==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值