• Tomact优化


    一、版本信息隐藏

    1.修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面;

    2.也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向;

    <error-page>
    <error-code>403</error-code>
    <location>/forbidden.jsp</location>
    </error-page>
    <error-page>
    <error-code>404</error-code>
    <location>/notfound.jsp</location>
    </error-page>
    <error-page>
    <error-code>500</error-code>
    <location>/systembusy.jsp</location>
    </error-page>

    二、禁用Tomcat管理界面

    生产环境一般不适用Tomcat默认的管理界面,这些页面存放在Tomcat 的webapps安装目录下,

    把该目录下的所有文件删除即可:rm -rf  /usr/local/tomcat8/webapps/*

    可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间;

    三、telnet管理端口保护

    修改默认的ajp 8009端口为不易冲突的大于1024端口;

    修改Tomcat端口号 8080

    1.修改默认的8005管理端口为不易猜测的端口(大于1024);

    2.修改SHUTDOWN指令为其他字符串;

    <Server port="8527" shutdown="dangerous">

    四、降权启动

    1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;

    2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发;

     五、连接池配置

     使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。

      编辑配置文件 server.xml : vi  /usr/local/tomcat8/conf/server.xml

     默认配置:

    <!--  
                 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  
                        maxThreads="150" minSpareThreads="4"/>  
                     -->  

     修改实例:

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  
                maxThreads="150" minSpareThreads="100"   
            prestartminSpareThreads="true" maxQueueSize="100"/>   

    参数讲解:

    • name: 线程名称
    •  namePrefix: 线程前缀
    •  maxThreads : 最大并发连接数,不配置时默认200,一般建议设置500~ 800 ,要根据自己的硬件设施条件和实际业务需求而定。
    •  minSpareThreads:Tomcat启动初始化的线程数,默认值25   
    •  prestartminSpareThreads:在tomcat初始化的时候就初始化minSpareThreads的值, 不设置true时minSpareThreads   
    •  maxQueueSize: 最大的等待队列数,超过则拒绝请求

    六、ajp连接端口保护

    1.修改默认的ajp 8009端口为不易冲突的大于1024端口;

    2.通过iptables规则限制ajp端口访问的权限仅为线上机器;

    <Connector port="8528"
    protocol="AJP/1.3" />

    七、配置文件优化

    配置文件优化其实就是对 server.xml 优化,可以提大大提高 Tomcat 的处理请求的能力

    修改<Connector …>节点,增加 executor 属性

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  
            maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>  

    例如:

    <Connector executor="tomcatThreadPool"  
                   port="8080" protocol="HTTP/1.1"  
                   URIEncoding="UTF-8"  
                   connectionTimeout="30000"  
                   enableLookups="false"  
                   disableUploadTimeout="false"  
                   connectionUploadTimeout="150000"  
                   acceptCount="300"  
                   keepAliveTimeout="120000"  
                   maxKeepAliveRequests="1"  
                   compression="on"  
                   compressionMinSize="2048"  
                   compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"   
                   redirectPort="8443" />  
    • maxThreads,最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
    • connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒,可根据检测实际情况,适当修改。
    • enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。
    • compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。
    • compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048。
    • compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。
    • noCompressionUserAgents="gozilla, traviata": 对于以下的浏览器,不启用压缩。
    • -server:一定要作为第一个参数,在多个 CPU 时性能佳,还有一种叫 -client 的模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试,在 32 位环境下直接运行 Java 程序默认启用该模式。Server 模式的特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境,在具有 64 位能力的 JDK 环境下默认启用该模式,可以不配置该参数。

    八、JVM优化

    Tomcat本身还是运行在JVM上的,通过对JVM参数的调整我们可以使Tomcat拥有更好的性能。

    CATALINA_OPTS="  
    -server   
    -Xms6000M   
    -Xmx6000M   
    -Xss512k   
    -XX:NewSize=2250M   
    -XX:MaxNewSize=2250M   
    -XX:PermSize=128M  
    -XX:MaxPermSize=256M     
    -XX:+AggressiveOpts   
    -XX:+UseBiasedLocking   
    -XX:+DisableExplicitGC   
    -XX:+UseParNewGC   
    -XX:+UseConcMarkSweepGC   
    -XX:MaxTenuringThreshold=31   
    -XX:+CMSParallelRemarkEnabled   
    -XX:+UseCMSCompactAtFullCollection   
    -XX:LargePageSizeInBytes=128m   
    -XX:+UseFastAccessorMethods   
    -XX:+UseCMSInitiatingOccupancyOnly  
    -Duser.timezone=Asia/Shanghai   
    -Djava.awt.headless=true" 
    其他
    • -Xms:表示 Java 初始化堆的大小,-Xms 与-Xmx 设成一样的值,避免 JVM 反复重新申请内存,导致性能大起大落,默认值为物理内存的 1/64,默认(MinHeapFreeRatio参数可以调整)空余堆内存小于 40% 时,JVM 就会增大堆直到 -Xmx 的最大限制。
    • -Xmx:表示最大 Java 堆大小,当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃,因此一般建议堆的最大值设置为可用内存的最大值的80%。如何知道我的 JVM 能够使用最大值,使用 java -Xmx512M -version 命令来进行测试,然后逐渐的增大 512 的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息,默认值为物理内存的 1/4,默认(MinHeapFreeRatio参数可以调整)空余堆内存大于 70% 时,JVM 会减少堆直到-Xms 的最小限制。
    • -Xss:表示每个 Java 线程堆栈大小,JDK 5.0 以后每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256K。根据应用的线程所需内存大小进行调整,在相同物理内存下,减小这个值能生成更多的线程,但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在 3000~5000 左右。一般小的应用, 如果栈不是很深, 应该是128k 够用的,大的应用建议使用 256k 或 512K,一般不易设置超过 1M,要不然容易出现out ofmemory。这个选项对性能影响比较大,需要严格的测试。
    • -XX:NewSize:设置新生代内存大小。

    • -XX:MaxNewSize:设置最大新生代新生代内存大小
    • -XX:PermSize:设置持久代内存大小
    • -XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代。

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    • 如果服务器只运行一个 Tomcat
      • 机子内存如果是 8G,一般 PermSize 配置是主要保证系统能稳定起来就行:
        • JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
      • 机子内存如果是 16G,一般 PermSize 配置是主要保证系统能稳定起来就行:
        • JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
      • 机子内存如果是 32G,一般 PermSize 配置是主要保证系统能稳定起来就行:
        • JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms29696m -Xmx29696m -XX:NewSize=6144m -XX:MaxNewSize=9216m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
    • 如果是开发机
      • -Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m
  • 相关阅读:
    13 原型链_继承_this大总结_函数一定是对象,对象不一定是函数
    12 贪吃蛇游戏
    实现wiki访问
    11 第三个阶段js高级_原型
    JZOJ.5257【NOIP2017模拟8.11】小X的佛光
    模板——权值线段树(逆序对)
    LCA模板
    笛卡尔树——神奇的“二叉搜索堆”
    JZOJ.5246【NOIP2017模拟8.8】Trip
    JZOJ.5236【NOIP2017模拟8.7】利普希茨
  • 原文地址:https://www.cnblogs.com/zhaojingyu/p/9022387.html
Copyright © 2020-2023  润新知