• Tomcat优化


    主要有以下几个方面来提高Tomcat服务器的性能

    硬件资源对tomcat的影响

    系统硬件性能直接影响tomcat的并发量,起决定作用的是CPU和MEM,CPU运行速度提升,会带来tomcat响应时间的缩短,mem大小决定工程需要内存的大小和工程的并发数量。

    jdk版本选择

    在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。

    JDK参数优化

    JAVA_OPTS参数说明

    -server 启用jdk 的 server 版; 
    -Xms   java虚拟机初始化时的最小内存; 
    -Xmx  java虚拟机可使用的最大内存; 
    -XX:PermSize    内存永久保留区域 
    -XX:MaxPermSize   内存最大永久保留区域 
    -Xms=-Xmx=服务器内存*70%,如部署tomcat,jboss在同一台服务器-Xms=-Xmx=服务器内存*80%*1/4,现公司服务器内存一般都可以加到最大4G,所以可以采取以下配置,把以下参数添加到catalina.sh里面,
     JAVA_OPTS='-Xms1024m -Xmx4096m -XX:PermSize=256M -XX:MaxNewSize=256m-XX:MaxPermSize=256m'
      
    #-Xmx6000m                        #设置JVM最大可用内存为6000MB
    #-Xms6000m                        #设置JVM初始可用内存为6000MB
    #-Xmn2g                            #设置年轻代大小为2G
    #-Xss128k                           #设置每个线程的堆栈大小为128k
    #-XX:NewRatio=4                 #设置年轻代与年老代的比值为4
    #-XX:SurvivorRatio=4            #设置年轻代中Eden区与Survivor区的大小比值为4
    #-XX:PermSize=512m                   #设置堆栈永久区起始大小为512m
    #-XX:MaxPermSize=512m             #设置堆栈永久区最大大小为512m
    #-XX:MaxTenuringThreshold=0     #设置垃圾最大年龄为0
    #-XX:+UseParallelGC                     #选择垃圾收集器为并行收集器
    #-XX:ParallelGCThreads=8             #配置并行收集器的线程数
    #-XX:+UseParallelOldGC                #配置年老代垃圾收集方式为并行收集
    #-XX:+UseAdaptiveSizePolicy     #并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时>间或者收集频率等,此值建议使用并行收集器时,一直打开。

    Tomcat并发优化

    <Connector port="9027"
      protocol="HTTP/1.1"  
      maxHttpHeaderSize="8192"        #http请求头信息的最大程度,超过此长度的部分不予处理。一般8K
      maxThreads="1000"                  #Tomcat可创建的最大的线程数。默认值200 
      minSpareThreads="100"            #Tomcat初始化时创建的线程数。默认值4
      maxSpareThreads="1000"           
      minProcessors="100"                #连接器的最小空闲线程数
      maxProcessors="1000"
      enableLookups="false"             #是否反查域名,默认值为true。为了提高处理能力,应设置为false
      URIEncoding="utf-8"                #指定Tomcat容器的URL编码格式。
      acceptCount="1000"                 #指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10
      disableUploadTimeout="true"/>     #上传时是否使用超时机制 

    压缩

    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端口这个段的配置

    示例:

    <!--enable tomcat ssl-->
    
        <Connector port="8443" 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"
    
                    SSLEnabled="true"
    
               scheme="https" secure="true"
    
               clientAuth="false" sslProtocol="TLS"
    
               keystoreFile="d:/tomcat2/conf/shnlap93.jks" keystorePass="aaaaaa"
    
          />
    示例

    数据库性能调优

    Tomcat性能在等待数据库查询被执行期间会降低。如今大多数应用程序都是使用可能包含“命名查询”的关系型数据库。
    如果是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提升性能。另一件重要事是确保所有数据库连接正确地关闭。
    给数据库连接池设置正确值也是十分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。
    因为配置依赖与应用要求,我也不能在本文指定正确的值。你可以通过调用数据库性能测试来找到正确的值。

    Tomcat本地库

    Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程序员提供了超强的扩展性和性能,在产品运作中帮助融合原生的服务器技术以展现最佳的性能。

    禁用AJP协议

    (1)通过禁用AJP协议,达到在集群的时候提高处理请求的时间。

      图1

     (2)启动tomcat后,不论从刚刚的管理员界面,还是从控制台上(如图1所示)都可以看出,AJP协议是开启的。

      我们要做的就是要将此协议禁用,禁用方法:在server.xml中,将  

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    注释掉,重新启动tomcat,可以看出控制台上已经不存在上图 黑框中所示的。

    将BIO通讯模式修改为NIO通讯模式

    (1)tomcat通讯协议支持http1.0和1.1,tomcat默认走的是BIO通讯模式,tomcat7和tomcat8之所以默认的都是效率低下的BIO通讯模式,是因为和前面的就项目做兼容。
    (2)在控制台上(如图1所示)或者管理界面都可以看到,tomcat启动的通讯模式是bio的。
    (3)应用场景:tomcat集群的时候,若项目比较新,都是1.5类库之前,即JDK版本大于1.5,可将集群中每一个tomcat的启动模式设置为高并发高性能的应答模式(NIO)。
    (4)配置方法:在server.xml中 ,将 <Connector connectionTimeout="20000" port="8066" protocol="HTTP/1.1" redirectPort="8448"/> 改为:
    <Connector connectionTimeout="20000" port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8448"/>
    其中,原来的protocol="HTTP/1.1"表示遵循http1.1协议,同时,也是一个最原始的未经优化的通信协议,
    修改之后的 protocol="org.apache.coyote.http11.Http11NioProtocol" ,表示以 NIO模式启动。

    优化连接器

    1) 设置tcpNoDelay属性值为“true”;
    2) 通过maxKeepAliveRequest属性调整允许keep-alive功能的请求的最大数目,值为1时表示禁用;
    3) 调整socketBuffer属性的值以改变套接字缓冲的大小;
    4) 将enableLookups设置为false以禁用DNS反解;
    5) Tomcat是一个多线程的Servlet容器,使用线程池能对服务器性能带去很大影响;这主要通过maxThreads、maxSpareThreads和minSpareThreads来定义;

    示例:

    <Connector port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
                connectionTimeout="20000"
                enableLookups="false"
                maxPostSize="10485760"
                URIEncoding="UTF-8" 
                acceptCount="100"
                acceptorThreadCount="2"
                disableUploadTimeout="true" 
                maxConnections="10000"
                SSLEnabled="false"
        />

    指定使用线程池来处理HTTP请求 

    注释如下的原始配置

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

    增加如下配置,如原配置文件有,则取消注释进行修改即可。

    <!--共享执行器,能定义一个或多个线程池-->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
            maxThreads="600" minSpareThreads="100" maxIdleTime="60000"/>
     <!--最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。-->
    <!--使用线程池的连接器-->
    <Connector executor="tomcatThreadPool"
                   port="8080" protocol="HTTP/1.1"
                   connectionTimeout="60000"
                   keepAliveTimeout="15000"
                   redirectPort="8443" 
                   maxHttpHeaderSize="8192" 
                   URIEncoding="UTF-8" 
                   enableLookups="false" 
                   acceptCount="500"
                   disableUploadTimeout="true"/>

    参数说明:

    connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒
    keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒
    maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间) 
    maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理,一般8K。
    URIEncoding - 指定Tomcat容器的URL编码格式。
    acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。
    disableUploadTimeout - 上传时是否使用超时机制。
    enableLookups - 是否反查域名,取值为:true或false,为了提高处理能力,应设置为false。
    bufferSize - 定义连接器输入流缓存大小,默认2048bytes。
    maxSpareThreads - 做多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程 。
    maxThreads - 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。
    minSpareThreads - 最小空闲线程数,Tomcat初始化时创建的线程数 。

    注意:允许的最大连接数,还受制于操作系统的内核参数设置,通常windows是2000个左右,linux是1024个左右。

  • 相关阅读:
    Linux日常之命令sort
    Linux日常之命令sed
    Linux日常之命令grep
    Linux日常之命令awk
    Linux日常之命令tee
    Linux日常之数据重定向
    Hibernate打印SQL及附加参数
    使用D3 Geo模块画澳大利亚地图
    基于Spring-WS的Restful API的集成测试
    做项目时需要考虑的安全性问题
  • 原文地址:https://www.cnblogs.com/panwenbin-logs/p/8177284.html
Copyright © 2020-2023  润新知