Tomcat性能调优

1.调优方式

1.1.tomcat自身调优

  • 动静分离
  • 启用线程池
  • 修改运行模式
  • 禁用AJP连接方式

1.2.jvm内存调优

jvm内存调优

2.tomcat自身调优

2.1.动静分离

tomcat对静态资源对处理性能较差,可以将动态资料资源和静态资源分开,静态资源使用nginx,动态资源使用tomcat

2.2.启用线程池

    <Executor name="tomcatThreadPool" 
                namePrefix="catalina-exec-"
                maxThreads="1000" 
                minSpareThreads="10"
                maxQueueSize="20000"
                maxIdLeTime="60000"/>
  • name:给执行器(线程池)起一个名字;

  • namePrefix:指定线程池中的每一个线程的 name 前缀;

  • maxThreads:线程池中最大的线程数量,假设请求的数量超过了 750,这将不是意味着将 maxThreads 属性值设置为 750,它的最好解决方案是使用「Tomcat集群」。也就是说,如果有 1000 请求,两个 Tomcat 实例设置 maxThreads = 500,而不在单 - Tomcat 实例的情况下设置 maxThreads=1000。

  • minSpareThreads:线程池中允许空闲的线程数量(多余的线程都杀死);

  • maxQueueSize: 线程池队列大小,超出对线程直接被拒绝

  • maxIdLeTime:一个线程空闲多久算是一个空闲线程;

2.3.调优连接器Connector

<Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"  #连接超时时间
               redirectPort="8453"				#ssl重定向端口
                enableLookups="false"		#是否启动dns解析
                URIEncoding="UTF-8" />	#请求URI编码
  • executor:所使用对线程池,需要在上面定义
  • port:端口,服务开放对端口
  • protocol:请求使用到连接协议。BIO,NIO,APR
    tomcat8以下默认是BIO,tomcat8以上默认是NIO
    默认值为 HTTP/1.1使用自动切换机制选择基于Java NIO的连接器或基于APR / native的连接器
    org.apache.coyote.http11.Http11NioProtocol-非阻塞Java NIO连接器
    org.apache.coyote.http11.Http11Nio2Protocol-非阻塞Java NIO2连接器
    org.apache.coyote.http11.Http11AprProtocol-APR/本地连接器。
  • connectionTimeout:连接超时时间,请求超过这个时间将返回超时
  • redirectPort:HTTPS重定向到另一个端口(connector)
  • enableLookups:是否启用dns解析,默认false
  • URIEncoding:这指定用于解码URI字节的字符编码。默认值为UTF-8

即使不设置executor也可以设置线程信息,将使用内置到线程池来创建线程

    <Connector executor="tomcatThreadPool"
              port="8082" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8463"
              maxThreads="1000"
               minSpareThreads="20"
               acceptCount="2000"
               enableLookups="false"
               URIEncoding="UTF-8" />

2.4.禁用AJP

AJP是二进制到HTTP传输协议,效率比HTTP更高,但是浏览器不支持,其他很多服务器也不支持。
AJP可以通过Apache的proxy_ajp模块进行反向代理,暴露成http协议给客户端访问。nginx不支持AJP协议

注释掉AJP连接

    <!-- Define an AJP 1.3 Connector on port 8009 -->
<!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->

3.jvm调优

jvm主要是调整内存大小,降低gc时间

  • 修改bin/catalina.sh
    在第一行添加如下参数
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
  • java.awt.headless:Headless模式是在缺少显示屏、键盘或者鼠标是的系统配置。
  • file.encoding:设定文件编码格式
  • -server:dk的server版,tomcat默认以client模式运行,server版拥有更高的并发能力和更敏捷的垃圾回收机制
  • -Xms:Java虚拟机堆区内存初始内存分配的大小,按照实际情况进行分配(一般为操作系统可用内存的1/64大小)
  • -Xmx:Java虚拟机堆区内存可被分配的最大上限(一般为操作系统可用内存的1/4大小)
  • -XX:NewSize:新生代初始化内存的大小(注意:该值需要小于-Xms的值)
  • -XX:MaxNewSize:新生代可被分配的内存的最大上限(注意:该值需要小于-Xmx的值)
  • -Xmn:对-XX:NewSize、-XX:MaxNewSize两个参数同时进行配置
  • -XX:PermSize:非堆区初始化内存分配大小。
  • -XX:MaxPermSize:非堆区分配的内存的最大上限。

调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。

参考

  • https://tomcat.apache.org/tomcat-9.0-doc/config/executor.html
  • https://tomcat.apache.org/tomcat-9.0-doc/config/http.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值