• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
爱笑的男人运气不会太差
博客园    首页    新随笔    联系   管理    订阅  订阅

Java之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连接提供并发性能
posted @ 2022-09-16 16:44  爱笑的男人运气不会太差  阅读(109)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3