Tomcat性能优化

Tomcat性能优化,主要从两方面着手展开:javascript

  • 基于JVM的内存优化
  • Tomcat启动行参数的优化

基于JVM的内存优化

注意:32位系统下JVM内存的限制:不能突破2GB内存,即便服务器装有8~32G内存,但Java也只能用到2GB的内存。而64位操做系统上不管是系统内存仍是JVM都没有此限制。css

Tomcat 启动行参数的优化

Tomcat运行在JVM上,由于它的启动其实也只是个java命令行,因此首先对Java的启动命令行进行调优。html

配置启动行参数

Tomcat的启动参数位于Tomcat安装目录\bin目录下的catalina.bat文件(Linux下为catalina.sh文件),打开该文件后加入如下参数(通常该文件头部是一堆的由##包裹着的注释文字,在该注释文字的末尾处回车换行):java

  • 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 />这一行:less

<Connector port=”8080″ protocol=”HTTP/1.1″ 。。。 />

<Connector />为Tomcat容器性能参数设置的地方。下面为修改后的设置:

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000" acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5"
useURIValidationHack="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" redirectPort="8443" />

参数释疑:

  • 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等输出的网页也能进行压缩,压缩效率惊人。

  1. compression=”on” 打开压缩功能
  2. compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB
  3. noCompressionUserAgents=”gozilla, traviata” 对于如下的浏览器,不启用压缩
  4. compressableMimeType=”text/html,text/xml” 压缩类型

最后不要忘了把8443端口的地方也加上一样的配置,由于若是咱们走https协议的话,咱们将会用到8443端口这个段的配置。

相关文章
相关标签/搜索