Kevin's blog Kevin's blog
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档

Kevin

你可以迷茫,但不可以虚度
首页
  • AI基础
  • RAG技术
  • 提示词工程
  • Wireshark抓包
  • 常见问题
  • 数据库
  • 代码技巧
  • 浏览器
  • 手册教程
  • 技术应用
  • 流程规范
  • github技巧
  • git笔记
  • vpn笔记
  • 知识概念
  • 学习笔记
  • 环境搭建
  • linux&运维
  • 微服务
  • 经验技巧
  • 实用手册
  • arthas常用
  • spring应用
  • javaAgent技术
  • 网站
友情链接
  • 分类
  • 标签
  • 归档
  • 手册教程

  • 技术应用

    • 工作杂货

      • Jprofiler排查
      • ES查询压测
      • 阿尔萨斯(Arthas)
      • 定时任务
      • DruidDataSource配置
      • Spring Cloud Stream
      • 线上Tomcat配置参考
        • 配置Prometheus及健康检测
        • Feign远程调用
        • Hystrix单方法熔断配置
        • 本地开发联调配置
        • Java代码杂记
        • SQL脚本杂记
        • 批量算费本地工具类
        • Apollo配置模糊查询
        • 开发问题记录
        • 机器配置参考
      • 技巧备忘

    • 流程规范

    • GitHub技巧

    • VPN

    • Git笔记

    • 实用手册
    • 技术应用
    • 工作杂货
    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
    上次更新: 2022/06/02, 11:20:10
    Spring Cloud Stream
    配置Prometheus及健康检测

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

    最近更新
    01
    AI是如何学习的
    06-06
    02
    提示词工程实践指南
    06-06
    03
    chatGpt提示原则
    06-06
    更多文章>
    | Copyright © 2022-2025 Kevin | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式