• 小计Tomcat的调优思路


    描述

    最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优
    都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,
    tomcat调优大致分为两大类:

    一、tomcat的自身调优

    • 采用动静分离节约tomcat的性能
    • 调整tomcat的线程池
    • 调整tomcat的连接器
    • 修改tomcat的运行模式
    • 禁用AJP连接器

    二、jvm的调优

    • 调优Jvm内存

    tomcat自身调优

    采用动静分离

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

    调优tomcat的线程池

    • 打开tomcat的serve.xml
    • 配置Executor

    参数解释

    • name
      给执行器(线程池)起一个名字
    • namePrefix
      指定线程池中的每一个线程的name前缀
    • maxThreads
      线程池中最大的线程数量
      假设:请求的数量超过了“750”,这将不是意味着将maxThreads属性值设置为“750”,它的最好解决方案是使用“Tomcat集群”。
      也就是说,如果有“1000”请求,两个Tomcat实例设置“maxThreads= 500”,而不在单Tomcat实例的情况下设置maxThreads=1000。
    • minSpareThreads
      线程池中允许空闲的线程数量(多余的线程都杀死)
    • maxIdLeTime
      一个线程空闲多久算是一个空闲线程
      其他的配置其实阅读官方文档是最好的:
      tomcat8的配置文档

    调优tomcat的连接器Connector

    • 打开tomcat的serve.xml
    • 配置Connector

    参数解释

    • executor
      指定这个连接器所使用的执行器(线程池)

    • enableLookups="false"
      关闭dns解析,减少性能损耗

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

    • maxProcessors
      最大可以创建的线程数

    • acceptCount="1000"
      线程池中的线程都被占用,允许放到队列中的请求数

    • maxThreads="3000"
      最大线程数

    • minSpareThreads="20"
      最小空闲线程数,这里是一直会运行的线程

    • 和压缩有关系的配置
      如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,
      那么也就不需要配置在 Tomcat 中配置压缩了

    • 一个完整的配置

    <Connector port="8080"
            protocol="HTTP/1.1" 
            connectionTimeout="20000" ##超时时间,毫秒,这里是20秒
            redirectPort="443" 
            maxThreads="3000" ##最大线程数
            minSpareThreads="20" ##最小空闲线程数,这里是一直会运行的线程
            acceptCount="1000" ##接收的队列数
            enableLookups="false" ##关闭dns解析,减少性能损耗
            server="None"               
            URIEncoding="UTF-8"   
          />
    

    *关于Connector的配置文档

    通过修改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(java native interface)
      技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖
    • 提升Tomcat对静态文件的处理性能,当然也可以采用动静分离

    禁用AJP连接器

    Apache JServer Protocol
    使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用

    JVM的调优

    tomcat是运行在jvm上的,所以对jvm的调优也是非常有必要的。

    调优内存

    • 找到:catalina.sh

    • 添加的位置

    • 尝试的参数设置

    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"
    

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

    结尾

    • 这里只是简单记录一下调优都有哪些途径,更多的是找出思路,具体怎么调需要我们根据实际情况去验证调整。
    • 推荐书籍:HowTomcatWorks
  • 相关阅读:
    Java-使用IO流对大文件进行分割和分割后的合并
    Java-单向链表算法
    Java-二分查找算法
    Java-二叉树算法
    Java-对象比较器
    Android中Activity的四种开发模式
    Struts2工作原理
    C++实现单例模式
    数组中有一个数字出现的次数超过数组的一半,请找出这个数字
    c++ enum用法【转】
  • 原文地址:https://www.cnblogs.com/wangsen/p/9337969.html
Copyright © 2020-2023  润新知