组件

Tomcat配置优化

Toggle
Tomcat配置优化
Answer
12/15/16 7:40 AM

一、Tomcat三种线程方式

1、BIO(默认)

      BIO(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。
      Tomcat在默认情况下,就是以BIO模式运行的。就一般而言,BIO模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
      BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。

2、NIO(标准)

      NIO(New I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。
      Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
      NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
 
3、APR(建议)
      APR(Apache Portable Runtime/Apache可移植运行时)是Apache HTTP服务器的支持库。你可以简单地理解为Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作从而大大地提高Tomcat对静态文件的处理性能。
      Tomcat Apr也是在Tomcat上运行高并发应用的首选模式。

二、Tomcat三种线程配置

      以下仅对Tomcat的线程配置做基本配置讲解,并未涉及到相关优化,具体优化请看第三、第四节。

1、BIO(默认)

      就是默认的选项,不做改动。
      修改配置文件为
      <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
      截图:
      

 2、NIO(标准)

      让Tomcat以nio模式来运行也比较简单,我们只需要在:Tomcat安装目录/conf/server.xml文件中将Connector配置修改为如下图所示:
      修改配置文件为
      <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 
                  connectionTimeout="20000" redirectPort="8443" />
      截图:
      

3、APR(建议)

      如果你的系统对高并发有要求并且系统硬件性能好的话,建议使用此配置,否则建议使用JBoss或者其它容器吧。(个人建议)
      首先修改配置文件为
      <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" 
                  connectionTimeout="20000" redirectPort="8443" />
      截图:
      
     
      安装APR插件:请自行度娘
    
    

三、Tomcat容器内优化

      第二节对Tomcat的线程配置进行了基本的讲解,真正的优化要通过以下参数进行调整,下面参数配置可通用NIO\ARP模式,BIO模式请根据项目实际情况进行调整。

1、Connector具体配置

      性子急的可以直接把下面的配置拿去使用,红色字体请按自己的容器模式进行配置,别用错了,建议把后面的配置详情多看看,再按实际服务器配置进行调优,毕竟适合自己的才是最好的。
  • 源码:
<Connector port="8082" protocol="org.apache.coyote.http11.Http11NioProtocol"
           URIEncoding="UTF-8"
           minSpareThreads="30"
           enableLookups="false"
           disableUploadTimeout="true"
           connectionTimeout="20000"
           acceptCount="500"
           maxThreads="500"
           useURIValidationHack="false"
           compression="on"
           compressionMinSize="2048"
           compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
           redirectPort="8443"/>
 
  • 截图:
        
 

2、Connector参数说明:

  • URIEncoding :指定Tomcat容器的URL编码格式,使得Tomcat可以解析含有中文名的文件的url
  • minSpareThreads :最小备用线程数,Tomcat启动时的初始化的线程数,即使没有使用也开这么多空线程等待。
  • enableLookups :如果希望调用request.getRemoteHost()进行DNS查询,以返回远程客户的实际主机名,将enableLookups设为true。如果希望忽略DNS查询,仅仅返回IP地址,设为false(这样提高了性能)。缺省情况下,DNS查询是true的。
  • disableUploadTimeout :上传时是否使用超时机制。
  • connectionTimeout :网络连接超时,单位:毫秒。设置为0表示永不超时,通常可设置为20000毫秒,缺省值为60000(60秒)。
  • maxThreads :tomcat可创建的最大线程数,即同时处理的任务个数(最大并发数),默认值为200
  • acceptCount :当tomcat启动的线程数达到最大时(maxThreads的值),后续请求会被放入一个等待队列,这个队列的大小就是acceptCount 的值,如果这个队列也满了,就直接refuse connection,默认值为100。
  • useURIValidationHack :设成"false"可以减少对一些url的不必要的检查从而减省开销(可参考tomcat源码)。
  • compression :是否启用压缩 on为启用(文本数据压缩) off为不启用, force 压缩所有数据
  • compressionMinSize :启用压缩的输出内容大小,当超过最小数据大小才进行压缩,默认为2KB。
  • compressableMimeType :配置想压缩的数据类型,默认是 text/html,text/xml,text/plain
  • noCompressionUserAgents 对于指定的浏览器,不启用压缩,例如:"gozilla, traviata"。
  • redirectPort :如果Connector支持非SSL请求,在收到一个要求使用SSL传输的请求以后,Catalina会自动将该请求重定向到这里指定的端口号。
   特别说明:
  • minProcessors、maxProcessors、maxSpareThreads这三个参数在Tomcat7中已经去除,网上百度到大部分的配置都是错的,详情可参考官方文档。
  • 关于Connector更多的参数配置请参考官网说明
  • 使用compression、compressionMinSize、compressableMimeType、noCompressionUserAgents四个参数给Tomcat配置gzip压缩(HTTP压缩)功能可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript,Text,它可以节省40%左右的流量,更为重要的是,它可以对动态生成的包括CGI、PHP,JSP,ASP,Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
+2 (2 Votes)

RE: Tomcat配置优化
Answer
12/16/16 8:11 AM as a reply to 勇 杨.
非常好,谢谢分享!
0 (0 Votes)

RE: Tomcat配置优化
Answer
12/19/16 7:02 AM as a reply to John Zhang.
我把Tomcat优化单独抽出来,JVM的放在另一篇,这样分类更清晰一些
0 (0 Votes)

RE: Tomcat配置优化
Answer
12/20/16 10:02 AM as a reply to 勇 杨.
楼主好人,JVM的我怎么没找到?
0 (0 Votes)

RE: Tomcat配置优化
Answer
1/3/17 11:17 AM as a reply to 丙江 韩.
淡定,我还没有整理完,到时候一块发出来
0 (0 Votes)

RE: Tomcat配置优化
Answer
1/13/17 5:39 AM as a reply to 勇 杨.
OK~~
0 (0 Votes)