Tomcat 线程池配置的一个自相矛盾的地方 :报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

kun坤 2020-06-14 16:25:10 104

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

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

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

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

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

Java 应用服务中间件
分享到
取消 提交回答
全部回答(1)
  • kun坤
    2020-06-14 16:28:30

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

    ######

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

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

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

    ######

    引用来自“红薯”的帖子

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

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

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

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

    ######

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

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

    ######

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

    ######

    引用来自“红薯”的帖子

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

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

    ######Tomcat 是从空闲线程之中随机获取的吗?难道不是按照 Hash 的顺序获取的?
    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程