tomcat优化

一、server.xml配置优化

进入conf目录,打开server.xml 文件

  1. 找到 <Executor name="tomcatThreadPool" .../>,将其修改如下

    <Executorname="tomcatThreadPool"
    
          namePrefix="catalina-exec-"
    
          maxThreads="500"
    
          minSpareThreads="80"
    
          maxQueueSize="100"
    
          maxIdleTime="60000"
    
          prestartminSpareThreads="true"/>
    

maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断

minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25

maxQueueSize:最大的等待队列数,超过则拒绝请求

maxIdleTime:如果当前线程大于初始化线程,那空闲线程存活的时间,单位毫秒,默认60000=60秒=1分钟。

prestartminSpareThreads:在
Tomcat 初始化的时候就初始化

minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了

  1. 找到 <Connector port="8080" .../>,将其修改如下

    <Connector executor="tomcatThreadPool" port="80"
    
          redirectPort="8443"
    
          protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    
          connectionTimeout="20000"
    
          maxConnections="10000"
    
          enableLookups="false"
    
          acceptCount="100"
    
          maxPostSize="10485760"
    
          maxHttpHeaderSize="65536"
    
          compression="on"
    
          disableUploadTimeout="true"
    
          compressionMinSize="2048"
    
          acceptorThreadCount="2"
    
          processorCache="20000"
    
          tcpNoDelay="true"
    
          connectionLinger="5"
    
          URIEncoding="utf-8"
    
          server="Server Version 11.0"
    
          compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"/>
    

protocol :TOMCAT8以上使用org.apache.coyote.http11.Http11Nio2Protocol,效率会更高,如果启动是出现错误,请使用org.apache.coyote.http11.Http11NioProtocol。有可能是改了端口8005、8009导致。

connectionTimeout:Connector接受一个连接后等待的时间(milliseconds),默认值是60000。

maxConnections:这个值表示最多可以有多少个socket连接到tomcat上

enableLookups:禁用DNS查询

acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100。

maxPostSize:设置由容器解析的URL参数的最大长度,-1(小于0)为禁用这个属性,默认为2097152(2M) 请注意, FailedRequestFilter 过滤器可以用来拒绝达到了极限值的请求。

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

compression:是否启用GZIP压缩 on为启用(文本数据压缩) off为不启用, force 压缩所有数据

disableUploadTimeout:这个标志允许servlet容器使用一个不同的,通常长在数据上传连接超时。 如果不指定,这个属性被设置为true,表示禁用该时间超时。

compressionMinSize:当超过最小数据大小才进行压缩

acceptorThreadCount:用于接受连接的线程数量。增加这个值在多CPU的机器上,尽管你永远不会真正需要超过2。 也有很多非维持连接,您可能希望增加这个值。默认值是1。

processorCache:协议处理器缓存的处理器对象来提高性能。 该设置决定多少这些对象的缓存。-1意味着无限的,默认是200。 如果不使用Servlet 3.0异步处理,默认是使用一样的maxThreads设置。 如果使用Servlet 3.0异步处理,默认是使用大maxThreads和预期的并发请求的最大数量(同步和异步)。

tcpNoDelay:如果设置为true,TCP_NO_DELAY选项将被设置在服务器套接字,而在大多数情况下提高性能。这是默认设置为true。

connectionLinger:秒数在这个连接器将持续使用的套接字时关闭。默认值是 -1,禁用socket 延迟时间。

URIEncoding:网站一般采用UTF-8作为默认编码。

server:隐藏Tomcat版本信息,首先隐藏HTTP头中的版本信息

compressableMimeType:配置想压缩的数据类型

二、配置logging.properties文件

进入conf目录,打开logging.properties文件,将所有encoding = UTF-8这行前面加上‘#’,将此行注释掉,否则在运行tomcat时,控制台里的中文全部是乱码,也可以将UTF-8改成GBK.

三、配置JVM

进入bin目录,新建一个setevn.bat文件,然后用记事本打开,输入下面的配置信息

SET
JAVA_HOME=D:\Java\jdk1.8.0_221\jre

SET
JAVA_OPTS=-server -Xms4096m -Xmx4096m -Xmn2048m -XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=12
-Xloggc:../logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-XX:+DisableExplicitGC

-server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的

-Xms4096m:设置JVM最小内存为4096MB。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmx4096m:设置JVM最大可用内存为4096MB

-Xmn2048m:

设置JVM新生代大小(JDK1.4之后版本,此设置等同于 -XX:NewSize 和 -XX:MaxNewSize)。一般-Xmn的大小 是-Xms的1/2左右,不要设置的过大或过小,
过大导致老年代变小,频繁Full
GC,过小导致minor GC频繁。如果不设置-Xmn,可以采用-XX:NewRatio=2来设置,也是一样的效果

-XX:NewSize:设置新生代大小

-XX:MaxNewSize:设置最大的新生代大小

-XX:PermSize:设置永久代大小 (8.0已废弃,用下面2个替换)

-XX:MaxPermSize:设置最大永久代大小 (8.0已废弃,用下面2个替换)

-XX:MetaspaceSize=256m

-XX:MaxMetaspaceSize=512m

-XX:SurvivorRatio:

在年轻代中,from(Survivor1)、to(Survivor2)与Eden的比值,若-XX:SurvivorRatio=10,由于from、to内存大小相等,from 、to分别占Young Generation的空间的1/12,Eden占10/12;

-XX:NewRatio=4:

设置年轻代(包括 Eden 和两个 Survivor 区)与年老代的比值(除去永久代)。设置为 4,则年轻代与年老代所占比值为 1:4,年轻代占整个堆栈的 1/5; Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。

-XX:MaxTenuringThreshold=10:

设置垃圾最大年龄,默认为:15。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。需要注意的是,设置了 -XX:MaxTenuringThreshold,并不代表着,对象一定在年轻代存活10次才被晋升进入老年代,它只是一个最大值,事实上,存在一个动态计算机制,计算每次晋入老年代的阈值,取阈值和MaxTenuringThreshold中较小的一个为准。

-Xloggc:../logs/gc.log GC日志文件位置

-XX:+DisableExplicitGC:这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,完全不会触发任何 GC 注:以上-Xms -Xmx -Xmn 是按照8G的服务器内存配置的,在实际配置中,需要使用者自行调试

四、静态文件乱码

进入conf目录,修改web.xml

<servlet>
   <servlet-name>default</servlet-name>
   <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
   <init-param>
       <param-name>debug</param-name>
       <param-value>0</param-value>
   </init-param>
   <init-param>
       <param-name>fileEncoding</param-name>
       <param-value>UTF-8</param-value>
   </init-param>
   <init-param>
       <param-name>listings</param-name>
       <param-value>false</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
    评论
    0 评论
avatar

取消