zoukankan      html  css  js  c++  java
  • Tomcat性能优化总结

    层级优化!(JAVA_OPTS参数和主要元素的优化)

    Tomcat大致元素架构:server--->service-->Engine-->Host-->Context

    Tomcat有可以使用三种协议:HTTP,AJP,HTTPS

    tomcat默认采用的BIO模型

    tomcat的运行模式有3种:bio,nio,apr(额外安装),例如:

    protocol="org.apache.coyote.http11.Http11Nio2Protocol"

    Tomcat各个元素里面都有listener监听器,由Service层的连接器connector通过线程池(Thread Pool)调用执行器(Executor),Connector的作用是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程携带该request和response交给绑定的Engine来处理,最后把处理后的Request和Response返回给客户端。

    tomcat在启动时,会将web项目中WEB-INF/web.xml和自己的conf/web.xml进行合并,然后在ContextConfig类下的configureContext()统一解析这些内容

    所以,不必要的配置要删除,以减少Tomcat解析成本。

    像在conf/web.xml的DefaultServlet或JspServlet,jspmap,mime,欢迎页面按需来配置。

    在conf/server.xml的Listener监听器中,VersionLoggerListener作用是显示版本和JDK环境,可以删除;AprLifecycleListener作用:加载APR库使用,这个配置仅当connector的protocol设置为AJP/1.3时有用,如果非AJP/1.3,可以删除。

    GlobalResourcesLifecycleListener作用于全局资源

    GlobalNamingResources可以定义全局资源,可以看出,这个tomcat的默认配置是通过读取$TOMCAT_HOME/ conf/tomcat-users.xml实现的。tomcat-user.xml用于定义tomcat管理页面相关配置,如果不登录管理界面可以删掉。

    当tomcat需要集成到Apache服务器时才使用这个<connector protocol=”AJP/1.3”/>

    Server元素的port监听关闭服务的请求

    Connector

    port:指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求

    minProcessors:服务器启动时创建的处理请求的线程数

    maxProcessors:最大可以创建的处理请求的线程数

    enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址

    redirectPort:指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号

    acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

    maxConnections:达到这个值之后,将继续接受连接,但是不处理,能继续接受多少根据acceptCount的值

    minSpareThreads:最小空闲线程数

    connectionTimeout:指定超时的时间数(以毫秒为单位)

    tomcat默认连接池有限制,可以为connector配置自己的连接池,例如:

    <Connector executor="tomcatThreadPool"port="8080" protocol="HTTP/1.1"

    jvm参数优化

    tomcat是用Java写的,就要运行在jvm上,垃圾处理方式等都要遵循jvm的方式。tomcat中设置jvm参数在 catalina.sh(Linux)和catalina.bat(windows)中,以JAVA_OPTS变量存储。

    各参数详解:

    -Xms:设置JVM初始内存大小(默认是物理内存的1/64)

    -Xmx:设置JVM可以使用的最大内存(默认是物理内存的1/4,建议:物理内存80%)

    -Xmn:设置JVM最小内存(128-256m就够了,一般不设置)

    -XX:PermSize :为JVM启动时Perm的内存大小

    -XX:MaxPermSize :为最大可占用的Perm内存大小(默认为32M)

    -XX:MaxNewSize,默认为16M

    -XX:NewSize :默认为2M,此值设大可调大新对象区,减少Full
    GC次数

    -XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)

    -XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空

    间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)

    -XX:userParNewGC 可用来设置并行收集【多CPU】

    -XX:ParallelGCThreads 可用来增加并行度【多CPU】

    -XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】

    1. conf/server.xml中Executor对应的相关参数

    <!--连接池设置-->
    <Executor 
    name="tomcatThreadPool" --线程池名
    namePrefix="catalina-exec-" --线程名称前缀 namePrefix+threaNumber
    maxThreads="1000" --池中最大线程数
    minSpareThreads="100" --活跃线程数 会一直存在
    maxIdleTime="60000" --线程空闲时间,超过该时间,线程会被销毁 ms
    maxQueueSize="Integer.MAX_VALUE" --被执行前线程的排队数目
    prestartminSpareThreads="false" --启动线程池时,是否启用minSpareThreads部分线程
    threadPriority="5" --线程池中线程优先级 1~10
    className="org.apache.catalina.core.StandardThreadExecutor" --线程实现类 自定义线程需时间 org.apache.catalina.Executor类
    />
    <!--当配置了连接池时,需要配置该连接器-->
    <Connector 
    executor="tomcatThreadPool" --线程池名
    port="8080" 
    protocol="org.apache.coyote.http11.Http11AprProtocol"
    connectionTimeout="20000"
    redirectPort="8443" />

    2.conf/server.xml中Connector对应的相关参数


    <Connector 
    port="8080" 
    protocol="org.apache.coyote.http11.Http11AprProtocol" --协议类型 
    disableUploadTimeout="true"
    keepAliveTimeout="20000"
    connectionTimeout="20000" --已接受,但未被处理的请求的等待超时时间 ms
    redirectPort="8443" --安全通信的转发端口 
    URIEncoding="UTF-8"--URL编码字符集
    minSpareThreads="100" --默认初始化和保持空闲的线程数
    enableLookups="false"--关闭DNS反向查询
    useURIValidationHack="false" --关闭不必要的检查
    maxThreads="1000" --处理请求线程的最大数目 未配置为200 此属性会被忽略
    acceptCount="1000" --所用可能的线程都在使用时传入连接请求的最大长度
    disableUploadTimeout="true" --设置允许更长的超时连接
    maxConnections="1000"--接受和处理的最大连接数(nio/nio2 1000,apr 8192)
    maxHttpHeaderSize="8192"--请求和响应http头的最大大小 8k
    tcpNoDelay="true" --tcp不延迟
    compression="on"--是否启用压缩 on off force 
    compressionMinSize="2048" --压缩前数据最小值 2k byte
    noCompressionUserAgents="gozilla,traviata" --设置哪些浏览器不压缩
    compressableMimeType="text/html,text/xml,text/css,application/javascript,text/plain" --设置压缩的文件类型
    />

    3. 有关 JAVA_OPTS

    set JAVA_OPTS=
    -server 
    -Xms1000M 
    -Xmx1000M #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
    -Xss512k 
    -XX:+AggressiveOpts 
    -XX:+UseBiasedLocking 
    -XX:+DisableExplicitGC 
    -XX:MaxTenuringThreshold=15 
    -XX:+UseConcMarkSweepGC 
    -XX:+UseParNewGC 
    -XX:+CMSParallelRemarkEnabled 
    -XX:+UseCMSCompactAtFullCollection 
    -XX:LargePageSizeInBytes=128m 
    -XX:+UseFastAccessorMethods 
    -XX:+UseCMSInitiatingOccupancyOnly

    -Djava.awt.headless=true

    4. 禁用8005端口

    telnet localhost 8005 然后输入 SHUTDOWN 就可以关闭 Tomcat,为了安全我们要禁用该功能

    默认值:

    <Server port="8005" shutdown="SHUTDOWN">
    修改为:

    <Server port="-1" shutdown="SHUTDOWN">
    ---------------------

  • 相关阅读:
    强制类型转换问题
    Linux学习1
    Android图像处理2
    Android图像处理1
    java环境搭建的问题
    Perl中的正则表达
    HTML中href的链接刷新页面问题
    ajax中的post方法中回调函数不执行的问题
    Tomcat 类加载器打破双亲委派模型
    电商支付的自动化测试选型之路
  • 原文地址:https://www.cnblogs.com/grimm/p/13038442.html
Copyright © 2011-2022 走看看