Tomcat调优
- Tomcat 免费、开源、轻量级。
- 在中小型系统和并发不是很多的情况下使用的相对多一些。
- 目前 Tomcat 最新版本为 9.0
Tomcat调优:
server.xml : 是tomcat 的主要配置文件,大部分调整都是改这个文件。
context.xml :主要用到的是开启 tomcat 缓存,在 context.xml 末尾增加一行,可以消除缓存不足的警告:
<Resources cachingAllowed="true" cacheMaxSize="100000">
server.xml的修改优化:
1、打开连接池配置
默认是关闭的:
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
修改方式:
<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="100"
prestartminSpareThreads = "true"
maxQueueSize = "100"
/>
修改参数说明:
maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
prestartminSpareThreads :在 Tomcat 初始化的时候就初始化minSpareThreads 的值。如果不等于true的话, minSpareThreads 的值就没效果。
maxQueueSize:最大的等待队列数,超过则拒绝请求。
2、修改连接参数配置
默认的:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改方式:
<Connector
executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="100"
maxPostSize="-1"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/ecmascript,application/x-ecmascript"
useSendfile="false"
URIEncoding="utf-8"
/>
修改参数说明:
protocol:
Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol;
Tomcat 6、7 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
enableLookups:禁用 DNS 查询
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个
数的请求将不予处理,默认设置 100
maxPostSize:以 FORM URL 参数方式的 POST 提交方式,限制提交最大的 大小,默认是 2097152(2 兆),它
使用的单位是字节。10485760 为 10M。如 果要禁用限制,则可以设置为 -1。
acceptorThreadCount:用于接收连接的线程的数量,默认值是 1。一般这个指 需要改动的时候是因为该服务器
是一个多核 CPU,如果是多核 CPU 一般配 置为 2.
useSendfile:属性默认为 true, 会禁用任何可能的压缩, 改成 false 就好了
compression:打开压缩功能
disableUploadTimeout:上传时是否使用超时机制
compressableMimeType:哪些资源类型需要压缩
3、禁用 AJP
Tomcat默认是开启的, 注释掉就行了:
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
4、JVM优化
服务器内存如果是 8G
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m
-XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m
-XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
服务器内存如果是 16G
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m
-XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m
-XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
说明:
- -Dfile.encoding:默认文件编码
- -server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的
- -Xmx1024m:设置 JVM 最大可用内存为 1024MB
- -Xms1024m:设置 JVM 最小内存为 1024m。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重 新分配内存。
- -XX:NewSize:设置年轻代大小
- -XX:MaxNewSize:设置最大的年轻代大小
- -XX:PermSize:设置永久代大小
- -XX:MaxPermSize:设置最大永久代大小
- -XX:NewRatio=4:设置年轻代(包括 Eden 和两个 Survivor 区)与终身代的比值(除去永久代)。设 置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5
- -XX:MaxTenuringThreshold=10:设置垃圾最大年龄,默认为:15。如果设置为 0 的话,则年轻代对象 不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一 个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以增加对象再年轻代的存活时间,增加 在年轻代即被回收的概论。
- -XX:+DisableExplicitGC:这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个 空调用,完全不会触发任何 GC
参考来源:https://blog.csdn.net/Rory898863935/article/details/91970004