【个人技术经验及开发技巧分享】 【个人技术经验及开发技巧分享】
首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载

Louis

首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载
  • 开发杂货

    • ES查询压测
    • Spring Cloud Stream
    • 线上Tomcat配置参考
      • 配置Prometheus及健康检测
      • Feign支持BasicAuth验证
      • Feign远程调用
      • Hystrix单方法熔断配置
      • 邮件发送自定义Excel
      • 本地开发联调配置
      • RabbitMQ配置备忘
      • Nacos配置中心
      • Java代码杂记
      • Oracle脚本备忘
      • Mysql并发数与连接数
      • 批量算费本地工具类
      • Apollo配置模糊查询
      • 异步任务AsyncIAE
      • 生产环境机器配置参考
    • 线上排查

    • 技巧备忘

    • 部署指南

    • 技术应用
    • 开发杂货
    luoxiaofeng
    2022-05-05
    目录

    线上Tomcat配置参考

    # 1. Tomcat 主要配置说明

    属性名 说明 默认值
    参考值
    minSpareThreads 最小空闲线程数 10 100
    maxThreads 最大线程数 200 1000
    acceptCount HTTP请求数达到最大线程数后,新请求被放入等待队列,该值为等待队列的最大等待数,队列一旦满了,后续请求会被tomcat拒绝SocketException: Connection refused 100 1000
    maxConnections 某一时刻,能够接受的最大连接数, maxConnections满了之后一样是将新请求被放入等待队列, 不超过acceptCount 10000 10000
    maxHttpPostSize 请求体最大长度kb 2097152 视情况
    maxHttpHeaderSize 请求头最大长度kb 0 视情况

    MaxThreads取值可以按比例推算

    1c2g 200

    2c4g 400

    4c8g 800

    这里取整1000

    # 2. maxThreads,acceptCount,maxConnections三者的关系

    • 参数maxThreads是指线程池里最大的活跃线程数
    • 参数maxConnections是最大的tcp连接数,而不是最大的Http请求数,通常一个tcp连接可以处理多个http请求
    • 所以,无论maxThreads和maxConnections谁达到了最大值,Tomcat Server都会将后续的Http请求放入队列中,一旦队列满了,后续Http请求会被tomcat拒绝, 从而抛出SocketException: Connection refused异常
    • 按照多路复用模型,一个TCP连接的已连接、可读、可写事件都会交由线程池去分配和处理
    • 所以,所谓达到了maxThreads和maxConnections这两个阈值,只是一个当前值(瞬时值)
    • 线程池的忙闲程度(吞吐量)取决于可读可写操作的耗时(还包括错误率,断连等)
    • 所以,maxThreads>=maxConnections=资源浪费,maxConnections/maxThreads>10=担心它可能处理不过来,需要设置稍大的maxThreads
    • 系统吞吐量的3个指标 rt, cc, qps都达标的情况下,就不需要设置较大的maxThreads,这需要反复压测得出结论
    • 线程池吞吐量上不去,acceptCount设的再大也无济于事,当然应用服务内存足够大,acceptCount设的大也无妨,但是http客户端一旦超时一样会断开
    • http1.1协议默认都是tcp复用的,一旦超时就会主动断开连接再次重建影响性能,通常浏览器会在一个域名下会建立多个tcp连接提供并发性能

    # 3. 配置文件参考

    server:
      tomcat:
        uri-encoding: UTF-8
        #初始化线程数
        min-spare-threads: 100
        #最大线程数
        max-threads: 1000
        #最大链接数
        max-connections: 10000
        #最大等待队列长度
        accept-count: 1000
        #请求头最大长度kb
        # max-http-header-size: 1048576
        #请请求体最大长度kb
        # max-http-post-size: 2097152
      #服务http端口
      port: 8080
      #链接建立超时时间
      connection-timeout: 10000
      servlet:
        #访问根路径
        context-path: /test
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #tomcat
    Spring Cloud Stream
    配置Prometheus及健康检测

    ← Spring Cloud Stream 配置Prometheus及健康检测→

    最近更新
    01
    SpringBoot
    10-21
    02
    Spring
    10-20
    03
    Sentinel
    10-14
    更多文章>
    Copyright © 2022-2023 Louis | 粤ICP备2022060093号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式