开发者社区> 问答> 正文

Tomcat 线程池配置的一个自相矛盾的地方 :报错

Tomcat 可以通过 Executor 来配置线程池,官方文档

关于线程池有三个重要参数:

maxThreads: 最大线程数
minSpareThreads: 最小的保持活动的线程数
maxIdleTime:线程的最大空闲时间,超过这个时间将被干掉

假设上述三个配置项我们指定了值分别为最大100个线程、最小10个线程、空闲时间30秒

可矛盾在于,当你线程数达到最大值100时,基本上就不会将下来了。因为降下来要满足空闲时间超过30秒,可Tomcat每次接收请求时,都是从池里随机拿出一个线程来处理该请求的,所有很难有线程的空闲时间超过30秒的,当然了,前提是访问量不能太小。

展开
收起
kun坤 2020-06-14 16:25:10 587 0
1 条回答
写回答
取消 提交回答
  • 感觉不出来矛盾在哪里,你的意思线程最小没用?

    ######

    引用来自“罪恶的花生”的帖子

    感觉不出来矛盾在哪里,你的意思线程最小没用?

    是的,这个值只在最开始启动的时候有用。我现在看oschina系统中的线程列表,那些 HTTP-9081-exec-xxxx 的线程数永远不会降下来。

    ######

    引用来自“红薯”的帖子

    引用来自“罪恶的花生”的帖子

    感觉不出来矛盾在哪里,你的意思线程最小没用?

    是的,这个值只在最开始启动的时候有用。我现在看oschina系统中的线程列表,那些 HTTP-9081-exec-xxxx 的线程数永远不会降下来。

    的确是这样,数据库连接池也是这样。我一般都把最小值和最大值设成一样,这样在启动时就能把所有连接都建立起来,而不会在用户请求时再建立连接,这样可以保证瓶颈不在连接中。

    ######

    用mac 中文五笔输入法不太好用。所以直接用 英文好的。

    数据库连接池 min && max 是它三到五倍 左右。我们项目我是这样设的。5的话,我会30-45左右。

    ######

    经过几天的测试发现,线程数还是会降下来的。

    ######

    引用来自“红薯”的帖子

    经过几天的测试发现,线程数还是会降下来的。

    哈哈,在访问是不会高峰降下来的,但是在夜晚或着访问量很低的情况下肯定会有所下降,但是会降多少呢?

    ######Tomcat 是从空闲线程之中随机获取的吗?难道不是按照 Hash 的顺序获取的?
    2020-06-14 16:28:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载