tomcat最大线程数设置的依据

重要参数

  • maxThread:tomcat的maxThread指的是处理业务的最大线程数,位于Connector组件的层次,在springboot中由server.tomcat.max-threads参数决定,默认是200
  • acceptCount:当前线程数达到maxThread的时候,等待队列的最大长度,默认为100

tomcat接收请求创建线程的过程

  1. 如果当前线程数还没有达到maxThread,则创建一个线程去执行任务
  2. 如果已经达到了maxThread,但是等待列队中的任务还没有达到accpetCount,则将请求放入等待队列中,直到有线程空闲下来
  3. 如果线程数达到了maxThread并且等待队列已满,则拒绝请求

参数设置的依据

从极端及的角度来说,一个CPU同一时间只能执行一个线程的任务,单CPU多线程只是计算机给我们开的玩笑。

一般来说,服务器的瓶颈主要有两种:

  • CPU
  • IO等待时间

从这两个角度来分析maxThread应该如何设置:

  • CPU

如果不考虑IO,也就是说服务器很少去做磁盘操作或者网络请求,那maxThread设置为与CPU数目同等的大小是最合适的,因为没有IO等待时间,CPU利用率百分百,线程与CPU数量一致,可以消除线程上下文切换带来的消耗

  • 如果tomcat服务调用了mysql,那么会带来网络IO和磁盘IO的消耗,我们知道CPU发起IO操作的指令之后,就处于空闲状态,IO操作交给DMA(外部设备不经过CPU而直接与系统内存交换数据的接口技术)处理。一般情况下我们的接口服务中不会有太多的计算,大多数瓶颈都在于数据库、磁盘、rpc服务调用的操作上,因此可以将maxThread的值调大一些,让CPU尽可能处理更多的请求。

总结

本文只是从理论的角度讨论了maxThread线程的凭据,如果CPU密集型的服务,设置线程数不宜多;如果是IO密集型,适当地上调线程数可以增加吞吐量

欢迎讨论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值