• Tomcat线程池的深入理解


    1.工作机制:

    Tomcat启动时如果没有请求过来,那么线程数(都是指线程池的)为0;

    一旦有请求,Tomcat会初始化minSpareThreads设置的线程数;

     

    2.线程池作用:

    Tomcat的线程池的线程数跟你的瞬间并发有关系,比如maxThreads设置为1000,当瞬间并发达到1000那么Tomcat就会起1000个线程来处理,这时候跟你应用的快慢关系不大。

     

    3.参数分析:

    //编辑tomcat安装目录下的conf目录下的server.xml文件

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

    maxThreads="3000" minSpareThreads="800"/>

     

    <Connector executor="tomcatThreadPool" port="8084" protocol="org.apache.coyote.http11.Http11AprProtocol"

    connectionTimeout="60000"

    keepAliveTimeout="30000"

    maxKeepAliveRequests="8000"

    maxHttpHeaderSize="8192"

    URIEncoding="UTF-8"

    enableLookups="false"

    acceptCount="1000"

    disableUploadTimeout="true"

    redirectPort="8443" />

     

    maxThreads:Tomcat线程池最多能起的线程数;

    maxConnections:Tomcat瞬间最多能并发处理的请求(连接);

    acceptCount:Tomcat维护最大的队列数(当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理);

    minSpareThreads:Tomcat初始化的线程池大小或者说Tomcat线程池最少会有这么多线程。

     

    比较容易弄混的是maxThreads和maxConnections这两个参数:

    比如maxThreads=1000,maxConnections=800,假设某一瞬间的并发时1000,那么最终Tomcat的线程数将会是800,即同时处理800个请求,剩余200进入队列"排队",如果acceptCount=100,那么有100个请求会被拒掉。

    注意:根据前面所说,只是并发那一瞬间Tomcat会起800个线程处理请求,但是稳定后,某一瞬间可能只有很少的线程处于RUNNABLE状态,大部分线程是TIMED_WAITING,如果你的应用处理时间够快的话。所以真正决定Tomcat最大可能达到的线程数是maxConnections这个参数和并发数,当并发数超过这个参数则请求会排队,这时响应的快慢就看你的程序性能了。

    并发的概念:不管什么并发肯定是有一个时间单位的(一般是1s),准确的来讲应该是当时Tomcat处理一个请求的时间内并发数,比如当时Tomcat处理某一个请求花费了1s,那么如果这1s过来的请求数达到了3000,那么Tomcat的线程数就会为3000,maxConnections只是Tomcat做的一个限制。

     

    4.Tomcat会停止长时间闲置的线程

    这个时间就是maxIdleTime。但我之前的测试中确实没有发现线程释放的现象,这是为什么呢?我发现除了这个参数线程池线程是否释放?释放多少?还跟当前Tomcat每秒处理的请求数(从Jmeter或LoadRunner来看可以理解为TPS)有关系。通过下表可以清晰的看出来线程数,TPS和maxIdleTime之间的关系:

    当然这个Thread Count不会小于minSpareThreads。

     

    (参考)https://www.cnblogs.com/zhanjindong/p/concurrent-and-tomcat-threads-updated.html

     
    ---------------------
    作者:@凭栏
    来源:CSDN
    原文:https://blog.csdn.net/xiaoxudong666/article/details/79688941
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    概率统计(DP)
    iOS中几种定时器
    微信开发笔记——微信网页登录授权,获取用户信息
    swift中通知的使用
    Swift的基础,操作符,字符串和集合类型
    NSNotificationCenter
    IOS中通知中心(NSNotificationCenter)的使用总结
    Swift观察者模式
    swift中通知的使用
    Swift
  • 原文地址:https://www.cnblogs.com/fjping0606/p/10309444.html
Copyright © 2020-2023  润新知