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规则进行转发;

扫描二维码关注公众号,回复: 451158 查看本文章

 五、连接池配置

 使用线程池,用较少的线程处理较多的访问,可以提高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

猜你喜欢

转载自www.cnblogs.com/zhaojingyu/p/9022387.html