一、 Tomcat JVM 参数设置
推荐JVM参数
类型 |
参数 |
运行模式 |
-sever,生产环境下建议开启服务器模式 |
整个堆内存大小 |
推荐将-Xms和-Xmx设置相同的值避免在每次GC 后调整堆的大小,sun官方文档建议最大不要超过可用物理内存的80%,经验值为物理内存的一半 |
年轻代空间大小 |
-XX:NewSize=256m –XX:MaxNewSize=256m |
永久代空间大小 |
-XX:PermSize=256m -XX:MaxPermSize=256m |
GC日志 |
-Xloggc:$CATALINA_BASE/logs/gc.log
|
GC算法 |
-XX:+UseParNewGC
|
发生OOM时 创建堆内存转储文件 |
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_BASE/logs |
Tomcat JVM 参数设置主要修改catalina.bat 或者 catalina.sh 文件中JAVA_OPTS变量。
假设服务器的配置: 8 CPU,8G内存,JDK1.6.x (该服务器仅作为Web应用服务器)
JVM参数方案:
-server -Xmx3550m -Xms3550m -Xmn1256m -Xss256k -XX:SurvivorRatio=6 -XX:PermSize=128m -XX:MaxPermSize=256m -XX:ParallelGCThreads=8 -XX:LargePageSizeInBytes=128m -XX:MaxTenuringThreshold=0 -XX:+UseConcMarkSweepGC -XX:+UseFastAccessorMethods
调优说明:
-Xmx 与 -Xms 相同以避免JVM反复重新申请内存。-Xmx 的大小约等于系统内存大小的一半,即充分利用系统资源,又给予系统安全运行的空间。
-Xmn1256m 设置年轻代大小为1256MB。此值对系统性能影响较大,Sun官方推荐配置年轻代大小为整个堆的3/8。(3/8 * 3350=1256.25)
-Xss256k 设置较小的线程栈以支持创建更多的线程,支持大数据量、高并发访问,特别是程序中有递归行为的,并提升系统性能。
-XX:SurvivorRatio=6 设置年轻代中Eden区与Survivor区的比值。系统默认是8,根据经验设置为6,则2个Survivor区与1个Eden区的比值为2:6,一个Survivor区占整个年轻代的1/8。
-XX:ParallelGCThreads=8 配置并行收集器的线程数,即同时8个线程一起进行垃圾回收。此值一般配置为与CPU数目相等。
-XX:LargePageSizeInBytes=128m 内存页的大小, 不可设置过大, 会影响Perm(永久代)的大小
-XX:+UseFastAccessorMethods原始类型的快速优化
-XX:MaxTenuringThreshold=0 设置垃圾最大年龄(在年轻代的存活次数)。如果设置为0的话,则年轻代对象不经过Survivor区直接进入年老代。在高并发环境下,其内存要么被缓存起来以减少直接访问DB,要么被快速回收以支持高并发请求,因此其内存对象在年轻代存活多次意义不大,可以直接进入老年代,根据实际应用效果,建议将此值设置为0。
-XX:+UseConcMarkSweepGC 设置老年代为并发收集,尽量减少应用的暂停时间,减少Full GC发生的几率。
二、 Tomcat 线程池设置
tomcat线程池指定Web请求负载的数量,可以通过调整连接器属性“maxThreads”完成设置。maxThreads的值应该根据流量的大小,如果值过低,将有没有足够的线程来处理所有的请求,请求将进入等待状态,只有当一个的处理线程释放后才被处理;如果设置的太大,Tomcat的启动将花费更多时间。因此它取决于我们给maxThreads设置一个正确的值。和连接数相关的参数有:
- minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
- maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
- acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
- enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
- connectionTimeout:网络连接超时,单位:毫秒。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxHttpHeaderSize="8192" minProcessors="100" maxProcessors="5000" maxThreads="5000" minSpareThreads="1000" maxSpareThreads="4000" enableLookups="false" acceptCount="5000" disableUploadTimeout="true" connectionTimeout="20000" debug="0" redirectPort="8443" />
三、 GZIP压缩
在server.xml配置文件中设置压缩的选项:
使用gzip对HTML、CSS、JS、JSON等文件进行压缩,通常可以节省大约50%-70%的大小,这样可以提高页面的请求时间和响应速度。
<Connector executor=" tomcatThreadPool" port="8080" //开启线程池 protocol="org.apache.coyote.http11. Http11AprProtocol" //开启Apr协议,需要安装Apr支持 compression=“on" noCompressionUserAgents="gozilla,traviata" compressionMinSize=“4096” compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain,text/javascript,text/json, application/json,application/x-javascript ,application/javascript ” redirectPort="8443" />
备注:如果发现内容没有被压缩,可以考虑调整compressionMinSize大小,如果请求资源小于这个数值,则不会启用压缩。