Tomcat性能优化
——针对高负载、高并发下Tomcat及相关环境的调优
面临的问题
随着用户数量的不断增加,终端对服务器的访问量也在不断飙升。可以预见的,在不久的将来,服务器必将面临高负载与高并发访问的严峻考验。
这是一个亟待解决的问题,如果服务器不能应对高负载、高并发的要求,那么必将影响用户的体验,给用户带来较差的印象,更严重的,则可能导致服务器崩溃,使终端无法完成对用户的响应。
优化目标
为满足用户量增长的需求,希望在短期内(3-6个月)通过后台部署环境的参数调优来达到高负载、高并发下后台系统的良好响应效率。
优化重点
目前,后台服务的部署方式如下图,主要以Linux+Tomcat为主。因此,主要的优化方向也集中在Tomcat以及其所在的Linux的参数调优。
Tomcat优化
主要优化server.xml 文件中Connector节点的参数:
1、enableLookups - 禁用DNS查询
2、maxThreads - Tomcat可创建的最大的线程数
3、acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数
4、connnectionTimeout - 网络连接超时
5、minSpareThreads - Tomcat初始化时创建的线程数
6、maxSpareThreads - 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
7、启用APR协议代替默认的Http协议
JVM内存优化
主要优化tomcat_home/bin/catalina.sh中JAVA_OPTS参数:
JAVA_OPTS=”- server -Xms【初始化内存大小】 -Xmx【可以使用的最大内存】”
另外,还可以对以下参数进行细节优化:
-XX:MinHeapFreeRatio=【百分比整数】
修改垃圾回收之后堆中可用内存的最小百分比,缺省值是40。如果垃圾回收后至少还有40%的堆内存没有被释放,则系统将增加堆的尺寸。
-XX:MaxHeapFreeRatio=【百分比整数】
改变垃圾回收之后和堆内存缩小之前可用堆内存的最大百分比,缺省值为70。这意味着如果在垃圾回收之后还有大于70%的堆内存,则系统就会减少堆的尺寸。
-XX:NewSize=【整数,单位B】
为已分配内存的对象中的Eden代设置缺省的内存尺寸。它的缺省值是640K。(-server选项把缺省尺寸增加到2M。)
-XX:MaxNewSize=【整数,单位B】
允许改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。(-server选项把缺省尺寸增加到2M。)
-XX:NewRatio=【value】
改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。
-XX:SurvivorRatio=【number】
改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。
-XX:TargetSurvivorRatio=【百分比整数】
设定您所期望的空间提取后被使用的残存空间的百分比,缺省值是50。
-XX:MaxPermSize=【整数,单位MB】
长久代(permanent generation)的尺寸,缺省值为32(32MB)。
其他
为使Tomcat中的参数优化效果更好,还需要一些环境优化,如:
1、Linux下单个线程可以打开的最大句柄数限制
2、Linux网络参数优化,提高系统负载
3、Mysql的最大连接数限制
4、Redis优化
5、SQL优化
SQL优化主要是将关联查询拆分成单表查询,并针对查询条件字段做索引的方式优化