Tomcat性能优化,主要从两方面着手展开:
- 基于JVM的内存优化
- Tomcat启动行参数的优化
基于JVM的内存优化
注意:32位系统下JVM内存的限制:不能突破2GB内存,即使服务器装有8~32G内存,但Java也只能用到2GB的内存。而64位操作系统上无论是系统内存还是JVM都没有此限制。
Tomcat 启动行参数的优化
Tomcat运行在JVM上,因为它的启动其实也只是个java命令行,所以首先对Java的启动命令行进行调优。
配置启动行参数
Tomcat的启动参数位于Tomcat安装目录\bin目录下的catalina.bat文件(Linux下为catalina.sh文件),打开该文件后加入以下参数(一般该文件头部是一堆的由##包裹着的注释文字,在该注释文字的末尾处回车换行):
- Linux版本
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "
- Windows版本
set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true
参数解释
-
-server,生产环境下必须加上此参数。默认情况下,Tomcat以java -client的模式来运行,server意味着Tomcat以真实的production的模式运行,也就是说server模式下,Tomcat的优点:
- 更大更高的并发处理能力
- 更快更强进的JVM垃圾回收机制
- 更多的负载和吞吐量
-
-Xms、-Xmx 设置JVM内存,把两个设置为一样是最优的做法。 一个系统随着并发数越来越高,它的内存使用情况逐步上升,上升到最高点不能上升了,开始回落。内存回落时(尤其大起大落),付出的代价是CPU高速开始运转进行垃圾回收,此时严重情况下甚至会造成系统出现“卡壳”(操作时网页停止几秒甚至十几秒),因为JVM 正在进行垃圾回收。因此一开始就把这两个设置一样的数值,使得Tomcat在启动时就为最大化参数,充分利用系统的效率。
-
-Xmn 设置年轻代大小。整个堆大小=年轻代 + 年老代 + 持久代。持久代一般固定大小为64M
-
-Xss 设定每个线程的栈大小
-
-XX:PermSize=128M -XX:MaxPermSize=256M JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64; 由-XX:MaxPermSize设置最大非堆内存大小,默认是物理内存的1/4;
Tomcat线程优化(吞吐量)
打开Tomcat目录下/conf/server.xml文件,并定位到<Connector />这一行:
<Connector />为Tomcat容器性能参数设置的地方。下面为修改后的设置:
参数释疑:
-
URIEncoding="UTF-8" 使得Tomcat可以解析含有中文的URL
-
maxSpareThreads
-
minSpareThreads 最小备用线程数,Tomcat启动时的初始化线程数
-
enableLookups 是否启用域名解析,一般设为false(关闭)
-
connectingTimeout 网络连接超时毫秒数
-
maxThreads Tomcat使用线程处理接收的每个请求。这个值表示Tomcat可创建的最大线程数
-
acceptCount 当线程数达maxThreads后,后续请求会被放入一个等待队列,acceptCount是这个队列的大小,如果这个队列也满了后,就直接refuse connection。默认值100。
-
gzip压缩功能
compression="on" compressionMinSize="2048"compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
- compression=”on” 打开压缩功能
- compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB
- noCompressionUserAgents=”gozilla, traviata” 对于以下的浏览器,不启用压缩
- compressableMimeType=”text/html,text/xml” 压缩类型
最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置。