为了让Tomcat稳定长期的运行,提高性能,默认的配置肯定是不行的。
从两个方向入手:Tomcat本身配置优化和JVM优化
环境:Tomcat8+JDK1.8+Linux Ubuntu16.04
Tomcat本身配置优化就是修改server.xml文件的相关参数:
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
GlobalNamingResources>
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8"
connectionTimeout="30000"
enableLookups="false"
disableUploadTimeout="false"
connectionUploadTimeout="150000"
acceptCount="300"
keepAliveTimeout="120000"
maxKeepAliveRequests="1"
tcpNoDelay="true" --tcp不延迟
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="/usr/tomcat/apache-tomcat-8.5.24/webapps/dnHomePage" debug="0" reloadable="true"/>
Host>
Engine>
Service>
Server>
tomcatThreadPool:修改线程池相关参数
URIEncoding:指定 Tomcat 容器的 URL 编码格式
connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,通常设置为 30000 毫秒
enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false
disableUploadTimeout:上传时是否使用超时机制
connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与disableUploadTimeout一起配合使用才会生效
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个
keepAliveTimeout:长连接最大保持时间(毫秒),表示在下次请求过来之前,Tomcat 保持该连接多久,默认是使用 connectionTimeout 时间,-1 为不限制超时
maxKeepAliveRequests:表示在服务器关闭之前,该连接最大支持的请求数。超过该请求数的连接也将被关闭,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间
tcpNoDelay:“true” tcp不延迟
compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽
compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048
noCompressionUserAgents:设置哪些浏览器不压缩
compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩
JDK版本不同参数配置也可能不同!
Tomcat 启动参数配置位于安装目录 bin目录下,Linux 操作系统就是 catalina.sh 启动文件。Windows是 catalina.bat启动文件。
配置之前先查看自己服务器的内存:free -m
参数信息参考:Linux服务器如何查看CPU占用率、内存占用、带宽占用
我这里是Linux Ubuntu16.04(1G)系统,在catalina.sh最后一行注释下面添加:
CATALINA_OPTS="
-Xmx250m
-Xms250m
-Xmn100m
-XX:SurvivorRatio=8
-XX:+UseG1GC
-XX:MaxTenuringThreshold=14
-XX:ParallelGCThreads=8
-XX:ConcGCThreads=8
-XX:+DisableExplicitGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=d:/a.dump
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-XX:+TraceClassLoading
-XX:+PrintClassHistogram"
如图:
-Xmx250m 最大堆大小
-Xms250m 初始堆大小
-Xmn100m 年轻代大小
-XX:SurvivorRatio=8 Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器
-XX:MaxTenuringThreshold=14 提升年老代的最大临界值(tenuring threshold). 默认值为 15[每次GC,增加1岁,到15岁如果还要存活,放入Old区]
-XX:ParallelGCThreads=8 设置垃圾收集器在并行阶段使用的线程数[一般设置为本机CPU线程数相等,即本机同时可以处理的个数,设置过大也没有用]
-XX:ConcGCThreads=8 并发垃圾收集器使用的线程数量
-XX:+DisableExplicitGC 禁止在启动期间显式调用System.gc()
-XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件
-XX:HeapDumpPath=d:/a.dump 导出OOM的路径
-XX:+PrintGCDetails 打印GC详细信息
-XX:+PrintGCTimeStamps 打印CG发生的时间戳
-XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息
-XX:+TraceClassLoading 监控类的加载
-XX:+PrintClassHistogram 按下Ctrl+Break后,打印类的信息
Win10(8G)
在bin目录下修改catalina.bat文件,在如图位置添加配置参数:
set “JAVA_OPTS=-Xmx800m -Xms800m -Xmn200m -XX:SurvivorRatio=8”
这里只是列几个参数,其它需要的参数添加上就好了。
参考文章:
JVM7、8详解及优化
Tomcat 调优及 JVM 参数优化
【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用