Tomcat 优化配置
Tomcat内存进行配置优化
注意:这里我优化的是Tomcat9,2GB内存的服务器,如果您的配置不一样可以自定义增加或者减少
打开tomcat中的 catalina.sh 文件
vim /bin/catalina.sh
添加如下配置到第一行
export JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1500m -Xmx1500m -XX:NewSize=128m -XX:MaxNewSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC -XX:+AggressiveOpts -XX:+UseBiasedLocking -Djava.awt.headless=true"
![](https://img.haomeiwen.com/i13155983/df9b7ca8ada4a182.png)
配置说明
配置 | 说明 |
---|---|
-Dfile.encoding=UTF-8 | 默认文件编码 |
-server=UTF-8 | 表示这是应用于服务器的配置,JVM 内部会有特殊优化处理的 |
-Xms1500m -Xmx1500m | 设置JVM最大和最小可用内存为1500MB |
-XX:NewSize | 设置年轻代大小 |
-XX:MaxNewSize | 设置最大的年轻代大小 |
-XX:MaxTenuringThreshold | 设置垃圾最大年龄,默认为:15。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。 |
-XX:NewRatio | 设置年轻代(包括 Eden 和两个 Survivor 区)与终身代的比值(除去永久代)。设置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5 |
-XX:+DisableExplicitGC | 这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,完全不会触发任何 GC |
-XX:+AggressiveOpts | 从单词上看是积极,生猛,将最新版的JDK优化后的新特性自动注入 |
-XX:+UseBiasedLocking | 启动一个优化的线程锁,对于高并发访问很重要,太多的请求忙不过来时将会自动进行优化(对于各自长短不一的请求,出现的阻塞、插队现象,自动优化) |
-Djava.awt.headless | 这个参数都是放在最后的,我们在J2EE工程中使用一些图标工具如:jfreechart,在web网页输出GIF、JPG流在window环境下不会有问题,但在生产环境下可能会出现不显示,此时这个配置可以解决这个参数 |
Tomcat 并发进行优化配置
打开tomcat中的 server.xml 文件
vim /conf/server.xml
配置如下(使用的是NIO(异步非阻塞))
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
URIEncoding="utf-8"
maxThreads="2000"
acceptCount="1500"
minProcessors="5"
maxProcessors="2500"
minSpareThreads="20"
maxSpareThreads="100"
useURIValidationHack="false"
connectionTimeout="10000"
enableLookups="false"
disableUploadTimeout="true"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
acceptorThreadCount="2"
redirectPort="8843"/>
![](https://img.haomeiwen.com/i13155983/fcebf83b8a7a28b0.png)
配置说明
配置 | 说明 |
---|---|
maxThreads | 支持并发访问线程 ,默认200 |
acceptCount | 当线程达到了maxThreads后,后续将请求放置到一个等待队列中,这个是这个队列的大小,若这个队列也满了,就直接refuse connection ,默认是100 |
minProcessors | 最小的处理线程数,即使没有任何Http请求,Tomcat也保持至少这么多线程等待处理 |
maxProcessors | 同时最大的线程数处理,如果系统中已经有这个数字的线程,那么,更多的链接请求将进入排队(acceptCount) |
minSpareThreads | 最小备用线程,初始化默认是10 |
maxSpareThreads | 最大备用线程(一旦超过这个值,Tomcat就会关闭不再需要的socket线程) |
useURIValidationHack | 减少它对一些url不必要的检查从而减少开销,为提高性能可以设置为false |
connectionTimeout | 网络链接超时,单位毫秒,设置为-1表示用户超时 |
enableLookups | 禁用DNS查询 |
disableUploadTimeout | 是否需要给tomcat容器设置上传时间限制 true代表不用 |
compression | 设置是否开启Gzip压缩 |
compressionMinSize | 最少压缩 |
compressableMimeType | 压缩的类型 |
acceptorThreadCount | 用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2. |
启动Tomcat
回到bin目录,启动tomcat命令
./startup.sh
查看启动是否成功命令
ps -ef | grep tomcat
![](https://img.haomeiwen.com/i13155983/1d40c522968e3558.png)
访问Tomcat
![](https://img.haomeiwen.com/i13155983/161683e4227a4b75.png)
此时tomcat已优化成功,经过我的测试,是tomcat没优化之前的十倍性能不止。