zoukankan      html  css  js  c++  java
  • Tomcat 调优技巧

    Tomcat 调优技巧:
    1、Tomcat自身调优:
    ①采用动静分离节约Tomcat的性能;
    ②调整Tomcat的线程池;
    ③调整Tomcat的连接器;
    ④修改Tomcat的运行模式;
    ⑤禁用AJP连接器;

    2、JVM调优

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

    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:线程池中允许空闲的线程数量(多余的线程都杀死);
    maxldLeTime:一个线程空闲多久算是一个空闲线程;

    3、 调优Tomcat的连接器Connector:
    打开Tomcat的server.xml,配置Connector:
    <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" enableLookups="false" URIEncoding="UTF-8"/>
    executor:指定这个连接器所使用的执行器(线程池);
    enableLookups=false:关闭DNS解析,减少性能损耗;
    minProcessors:服务器启动时创建的最少线程数;
    maxProcessors:最大可以创建的线程数;
    acceptCount=1000:线程池中的线程都被占用,允许放到队列中的请求数;
    maxThreads=3000:最大线程数;
    minSpareThreads=20:最小空闲线程数,这里是一直会运行的线程;

    4、修改Tomcat的运行模式:
    Tomcat8以下版本,默认使用的就是BIO(阻塞式IO)模式,对于每一个请求都要创建一个线程来进行处理,不适合高并发。
    Tomcat8以上版本,默认使用的就是NIO模式(非阻塞式IO)

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

    5、禁用AJP连接器:
    AJP的全称Apache JServer Protocol,使用Nginx+Tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8442"/>

    6、JVM调优:
    Tomcat是运行在JVM上的,所以对JVM的调优也是非常有必要的。
    找到catalina.sh,在cygwin=false前面添加:
    JAVA_OPTS="-Xms256m -Xms512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
    调整堆大小的目的是最小化垃圾收集的时间,以在待定的时间内最大化处理用户的请求。

  • 相关阅读:
    有return的情况下try catch finally的执行顺序
    for循环和foreach循环效率对比
    SpringBoot_数据访问-整合MyBatis-配置版MyBatis
    作品
    HTML——招生信息网(bootstrap、WOW动画、blueimp-gallery图片展示插件)
    HTML——信息技术基础精品课程
    HTML——校友会(bootstrap)
    毕设——社区志愿者信息管理系统
    HTML笔记——JS下载.json文件
    HTML笔记——bootstrap-select、table、tableExport、layer
  • 原文地址:https://www.cnblogs.com/hujinshui/p/9946323.html
Copyright © 2011-2022 走看看