Tomcat优化方案,列举如下几点:
1、修改内存配置:
在Tomcat根目录的bin目录下的catalina.sh首行加入如下配置:
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=512m"
其它配置项详解如下:
-server 一定要作为第一个参数,设置成服务器模式,在多个CPU时性能佳
-Xms 堆内存的初始大小,默认是物理内存的1/64,Xms和Xmx设置成一样最优,避免JVM因为频繁GC导致性能大起大落,具体值可根据服务器内存来设置。
-Xmx 堆内存的最大值,建议均设为物理内存的一半,不可超过物理内存。
-Xss 每个线程的栈内存大小
-XX:PermSize 持久代内存初始大小,默认是物理内存的1/64。
-XX:MaxPermSize 持久代内存最大值,默认是物理内存的1/64。
-XX:SurvivorRatio=2 设置年轻代Survivor和Eden比例的大小,默认是2,如果垃圾回收变成了瓶颈,您可以尝试定制生成池设置
-XX:NewSize 年轻代内存的初始大小。
-XX:MaxNewSize: 年轻代内存的最大值。
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-XX:+AggressiveOpts 当JDK版本升级时,你的JVM都会使用最新加入的优化技术
-XX:+UseParNewGC 对年轻代使用多线程并行回收,缩短minor收集的时间
-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC 的情况下, 尽量减少 mark 的时间
-XX:+UseConcMarkSweepGC 缩短major收集的时间,此选项在堆内存比较大而且Major收集时间较长的情况下使用更合适。
-XX:+UseCMSCompactAtFullCollection 在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。
-XX:LargePageSizeInBytes=128m 指定 Java heap的分页页面大小
-XX:+UseFastAccessorMethods get,set方法转成本地代码
-XX:+UseCMSInitiatingOccupancyOnly 指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集
2、启用高性能模式:
Tomcat有三种运行模式,BIO(阻塞模式)、NIO(非阻塞模式)、Apr(第三方库),Apr高并发的性能最好,NIO其次,BIO是Tomcat7以下的默认模式,并发性能最低。
使用NIO模式:
修改conf/server.xml文件下<Connector ... />标签的protocol属性:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" redirectPort="8443" />
使用Apr模式:
Apr是第三方库,需要安装依赖包,安装步骤如下:
1)安装aprtar zxvf apr-1.4.2.tar
cd apr-1.4.2
./configure --prefix=/usr/local/apr
make
make install
2)安装apr-iconvtar -zxvf apr-iconv-1.2.1.tar.gz
cd apr-iconv-1.2.1
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make
make install
3)安装apr-util
tar zxvf apr-util-1.3.10.tar.gz
cd apr-util-1.3.10
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make
make install
4)安装tomcat-native
tar zxvf tomcat-native-1.1.20-src.tar.gz
cd tomcat-native-1.1.20-src/jni/native
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.6.0_23
make
make install
修改conf/server.xml文件下<Connector ... />标签的protocol属性:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000" redirectPort="8443" />
3、配置线程池:
配置Tomcat的线程池,修改conf/server.xml文件下<Connector ... />标签,加入如下配置:
minSpareThreads="100" 最小备用线程数,tomcat启动时的初始化的线程数。
maxSpareThreads="500" 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
acceptCount="4096" 当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接连接拒绝
maxThreads="4096" 创建的最大的线程数,即最大并发数。
maxProcessors="2000" 服务器创建时最大处理线程数
minProcessors="5" 服务器创建时最小处理线程数
4、禁用DNS查询:
禁用DNS查询,反域名查询,即不去查询服务器主机名称信息。
enableLookups="false"
5、启用压缩:
对资源进行压缩,提高数据传输速度。
compression="on" 打开压缩功能
compressionMinSize="10240" 启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents="gozilla,traviata" 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩
6、其他配置:
URIEncoding="UTF-8" 指定Tomcat容器的URL编码格式。
disableUploadTimeout="true" 上传时是否使用超时机制
connectionTimeout="20000" 连接超时时间
maxHttpHeaderSize="8192" http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
配置示例:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
minSpareThreads="100" maxSpareThreads="500"
acceptCount="1024" maxThreads="1024"
enableLookups="false" disableUploadTimeout="true"
URIEncoding="UTF-8" connectionTimeout="20000"
maxHttpHeaderSize="8192"
compression="on" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443"
/>
注意:如果走HTTPS协议的话,会用到8443端口的配置,所以8443端口也需要加上同样的配置!!!
7、负载均衡:
使用nginx做负载均衡,后台部署多个Tomcat服务器,多个应用,均衡分配并发请求数,保证单台Tomcat服务器的并发数量不要过高,保障服务器性能。
......