tomcat6 优化

1.Java虚拟机调优

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

2.内存设置 VM参数调优

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

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

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

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

3.HTTP优化配置 server.xml
<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,则这条日志就会变成:
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值。使用前面所说的方法进行调整即可

猜你喜欢

转载自wentao365.iteye.com/blog/1138019