tomcat优化
一、server.xml配置优化
进入conf目录,打开server.xml 文件
-
找到 <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 的值就没啥效果了
-
找到 <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>
