Tomcat6性能优化

内存

Windows下,在文件{tomcat_home}/bin/catalina.bat的前面,增加如下设置:

set JAVA_OPTS=-XX:PermSize=128M-XX:MaxPermSize=256m -Xms1024m -Xmx1024m -Xmn256m

一定加在catalina.bat最前面,即set "CURRENT_DIR=%cd%"前面

 

linux下,在文件{tomcat_home}/bin/catalina.sh的前面增加

JAVA_OPTS="-XX:PermSize=128M-XX:MaxPermSize=256m –Xms1024m -Xmx1024m -Duser.timezone=Asia/Shanghai"

 

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

 

-Xms设置初始化内存大小

 -Xmx设置可以使用的最大内存
 -Xmn
:内存最小值,-Xmn128-256m就够了

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。

 

常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError: Javaheap space”,从而导致客户端显示500错误。Heap size 的大小是Young Generation 和Tenured Generaion 之和。提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

 

java.lang.OutOfMemoryError:PermGen space这个错误是因为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\Procrun2.0\Tomcat6\Parameters\Java中的 Options参数,在后面增加一下数据:

-XX:PermSize=128M

-XX:MaxPermSize=256m

 

操作系统

默认windows下打开文件数是2000;在linux下是1024;

vi /etc/profile 加入ulimit -n4096就把linux改成打开文件最大数为4096

 

禁用DNS查询

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

 

web下不显示目录列表

在web.xml中把listings改成false就行了

 

配置/conf/server.xml

<Connector port="8080"protocol="HTTP/1.1"

maxThreads="600"

minSpareThreads="100"

maxSpareThreads="500"

acceptCount="700"

connectionTimeout="30000"

keepAliveTimeout="15000"

maxKeepAliveRequests="1"

maxHttpHeaderSize="8192"

 URIEncoding="UTF-8" 

enableLookups="false" 

disableUploadTimeout="true"

redirectPort="8443"/>

说明

connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒

keepAliveTimeout- 长连接最大保持时间(毫秒)。此处为15秒

maxKeepAliveRequests- 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间) the maximum number of HTTP requests that can be held in thepipeline until the connection is closed by the server. Setting this attributeto 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining.Setting this to -1 allows an unlimited number of pipelined or keep-aliveHTTP requests. If not specified, this attribute is set to 100

maxHttpHeaderSize- http请求头信息的最大程度,超过此长度的部分不予处理。一般8K

URIEncoding - 指定Tomcat容器的URL编码格式

acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。

disableUploadTimeout- 上传时是否使用超时机制

enableLookups - 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false

bufferSize -defines the size (in bytes) of the buffer to be provided for input streamscreated by this connector. By default, buffers of 2048 bytes are provided.

minSpareThreads - 最小空闲线程数,Tomcat初始化时创建的线程数。Thedefault value is 4

maxSpareThreads - 做多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。The default value is 50

maxThreads - 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。If not specified, this attribute is set to 200。maxthread太多,导致切换过多,性能下降严重。这个数量应该是你单个机器的承载能力,压力测试下得出的结果。不可任意加大。一般情况下, 256-512个已经非常高的数值了。


你可能感兴趣的:(jvm,tomcat,linux,性能优化,Parameters,generation)