zoukankan      html  css  js  c++  java
  • [转]Tomcat 调优的技巧

    原文地址:https://mp.weixin.qq.com/s/7_bz3OPoH3x7xkkwkhJhbw

    Tomcat调优这块,在面试中会经常问道。目前Tomcat调优主要分为2大类,当前解释用的版本是Tomcat 8

      Tomcat的自身调优:采用动静分离节约 Tomcat 的性能调整 Tomcat 的线程池调整 Tomcat 的连接器修改 Tomcat 的运行模式禁用 AJP 连接器

      JVM的调优:调优Jvm内存

    1. Tomcat自身调优

    1.1 采用动静分离

      静态资源如果让 Tomcat 处理的话 Tomcat 的性能会被损耗很多,所以我们一般都是采用:Nginx+Tomcat 实现动静分离,让 Tomcat 只负责 jsp 文件的解析工作,Nginx 实现静态资源的访问。

    1.2 调优Tomcat线程池

      打开tomcat的server.xml,配置Executor,相关参数说明如下。  

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

      name:给执行器(线程池)起一个名字;

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

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

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

      maxIdLeTime:一个线程空闲多久算是一个空闲线程(单位毫秒,这里配置的是1分钟);

      其他的配置其实阅读官方文档是最好的「见参考链接」。

    1.3 调优Tomcat的连接器Connector   

    <Connector executor="tomcatThreadPool" 
            port="8080" 
            protocol="HTTP/1.1"
            connectionTimeout="20000"
            enableLookups="false"
            URIEncoding="UTF-8"
            redirectPort="8443" />

      executor:指定这个连接器所使用的执行器(线程池),1.2配置的Executor名称;

      port:访问端口;

      protocol:设置处理传入流量的协议;默认值是HTTP/1.1,它使用自动切换机制来选择基于非阻塞Java NIO的连接器或基于APR/本机的连接器。

      enableLookups=false:关闭 DNS 解析,减少性能损耗;

      URIEncoding:字符编码,如果未指定默认就是UTF-8

      minProcessors:服务器启动时创建的最少线程数;

      redirectPort:重定向端口,如果不支持非SSL请求,可以去掉。

      其他的配置其实阅读官方文档是最好的「见参考链接」。

    1.4 通过修改Tomcat的运行模式

      这里指的是Connector配置中的protocol属性,如果不用Tomcat版本自带的配置,可以手动指定。

      BIO:Tomcat8 以下版本,默认使用的就是 BIO「阻塞式IO)」模式。对于每一个请求都要创建一个线程来进行处理,不适合高并发。

      NIO :Tomcat8 以上版本,默认使用的就是NIO模式「非阻塞式 IO」。

      APR:全称 Apache Portable Runtime,是Tomcat生产环境运行的首选方式,如果操作系统未安装 APR 或者 APR 路径未指到 Tomcat 默认可识别的路径,则 APR 模式无法启动,自动切换启动 NIO 模式。所以必须要安装 APR 和 Native,直接启动就支持 APR,APR是从操作系统级别解决异步 IO 问题,APR 的本质就是使用 JNI 技术调用操作系统底层的 IO 接口,所以需要提前安装所需要的依赖提升 Tomcat 对静态文件的处理性能,当然也可以采用动静分离。

    1.5 禁用AJP连接器 

      AJP的全称 Apache JServer Protocol,使用 Nginx+Tomca t的架构,所以用不着 AJP 协议,所以把AJP连接器禁用。就是注掉下面这段:

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

    2. JVM调优

      Tomcat 是运行在JVM上的,所以对 JVM 的调优也是非常有必要的。在in文件下找到 catalina.sh。

       在 cygwin=false 前一行添加JVM参数设置:

      JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8-server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

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

    参考资料:

    https://tomcat.apache.org/tomcat-8.0-doc/config/index.html

    https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

    https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html

  • 相关阅读:
    javascript的函数调用什么时候加括号、什么时候不加括号
    妙味——JS学前预热03
    妙味——JS学前预热02
    妙味——JS学前预热01
    springbootday06 mysql
    springboot04 Ajax json Jquery
    springboot02 Thymeleaf
    springbootDay03 cookie和session 购物车技术
    Linux 基本命令
    NodeJs06 高并发
  • 原文地址:https://www.cnblogs.com/huanshilang/p/11582626.html
Copyright © 2011-2022 走看看