欢迎来到成都旭飞无抵押小额贷款官方平台,我们将竭诚为您提供:成都网站建设咨询个人小额信用贷成都网站seo汽车房产抵押贷款,当前位置:Tomcat线程池配置方式 返回首页。今天是:

专注:成都网站建设/成都个人无抵押贷款/成都SEO咨询
电话:028-1598564 QQ:52698741

成都旭飞无抵押小额贷款公司

网上无抵押贷款小额信贷公司个人无担保贷款网上贷款app平台

栏目导航

  1. 公司简介
  2. 网站系统
  3. 网站seo
  4. 营销软件
  5. 最近案例
  6. 建站资讯
  7. 联系我们
  8. 推荐阅读

推荐新闻

TAGS标签

联系我们

无抵押小额贷款_车房抵押贷款_成都旭飞网络科技有限公司
咨询电话:028-1598564
添加微信:XDUF785156
公司地址:成都市高新区
我们的优势
年轻的队伍:创意、活力、奉献 ,充满激情!
年轻的思想:大胆、创新、实力,敢于挑战!
年轻的品质:聆听、谦虚、诚信,勇于承担!
年轻的血液:热情、进取、自信,永不言弃!

当前位置:无抵押小额贷款 > 网站系统 > Tomcat线程池配置方式

Tomcat线程池配置方式

当前栏目:网站系统编辑:无抵押小额贷款
2020-09-04 19:29Tomcat线程池配置方式

以Tomcat 8为例配置如下,配置方式一。

· acceptCount: 请求等待队列大小。当Tomcat没有空闲线程处理连接请求时,新来的连接请求将放入等待队列,默认为100。当队列超过acceptCount后,新连接请求将被拒绝。

· maxConnections: Tomcat能处理的最大并发连接数。当超过后还是会接收连接并放入等待队列(acceptCount控制),连接会等待,不能被处理。BIO默认是maxThreads数量。NIO和NIO2默认是10000,ARP默认是8192。

· minSpareThreads: 线程池最小线程数,默认为10。该配置指定线程池可以维持的空闲线程数量。

· maxThreads: 线程池最大线程数,默认为200。当线程池空闲一段时间后会释放到只保留minSpareThreads个线程。

举例,假设maxThreads=100,maxConnections=50,acceptCount=50,假设并发请求为200,则有50个线程并发处理50个并发连接,50个连接进入等待队列,剩余100个将被拒绝。也就是说Tomcat最大并发线程数是由maxThreads和maxConnections中最小的一个决定。BIO场景下maxConnections和maxThreads是一样的,当我们需要长连接场景时,应使用NIO模式,并发连接数是大于线程数的。

配置方式二。

此处我们使用了org.apache.catalina.Executor实现,其表示一个可在多个Connector间共享的线程池,而且有更丰富的配置。

· 成都无抵押贷款 namePrefix: 创建的Tomcat线程名字的前缀。

· deamon: 是否守护线程运行,默认为true。

· minSpareThreads: 线程池最小线程数,默认为25。

· maxThreads: 线程池最大线程数,默认为200。

· maxIdleTime: 空闲线程池的存活时间,默认为60s。当线程空闲超过该时间后,线程将被回收。

· maxQueueSize: 成都十大贷款靠谱平台 任务队列最大大小,默认为Integer.MAX_VALUE,建议改小。可以认为是maxConnections。

· prestartminSpareThreads: 是否在Tomcat启动时就创建minSpareThreads个线程放入线程池,默认为false。

· executorTerminationTimeoutMillis: 在停止Executor时,等待请求处理线程终止的超时时间。

最后,要根据业务场景和压测来配置合理的线程池大小,配置太大的线程池在并发量较大的情况下会引起请求处理不过来导致响应慢,甚至造成Tomcat僵死。

在本书出版时,Docker容器中使用Runtime.getRuntime ().availableProcessors()获取到的是物理机核数,而不是容器实际使用的核数,这将对性能造成极大影响。所有用到该参数的地方都要记得调整,如CMS垃圾回收参数:-XX:ParallelGCThreads和-XX:ConcGCThreads,可扫二维码参考《使用Docker容器时不要忘记进行GC参数审查》。

13 异步并发实战

在做电商系统时,首页、活动页、商品详情页等系统承载了网站的大部分流量,而这些系统的主要职责包括聚合数据拼装模板、热点统计、缓存、下游功能降级开关、托底数据等。其中聚合数据需要调用多个其他服务获取数据、拼装数据/模板,然后返回给前端,聚合数据来源主要有依赖系统/服务、缓存、数据库等。而系统之间的调用可以通过如HTTP接口调用(如HttpClient)、SOA服务调用(如dubbo、thrift)等实现。

在Java中,如使用Tomcat,一个请求会分配一个线程进行请求处理,该线程负责获取数据、拼装数据或模板,然后返回给前端。在同步调用获取数据接口的情况下(等待依赖系统返回数据),整个线程是一直被占用并阻塞的。如果有大量的这种请求,则每个请求占用一个线程,但线程一直处于阻塞,降低了系统的吞吐量,这将导致应用的吞吐量下降。我们希望,在调用依赖的服务响应比较慢时,应该让出线程和CPU来处理下一个请求,当依赖的服务返回后再分配相应的线程来继续处理。而这应该有更好的解决方案:异步/协程。而Java是不支持协程的(虽然有些Java框架号称支持,但还是高层API的封装),因此,在Java中我们可以使用异步来提升吞吐量。目前大部分Java开源框架(HttpAsyncClient、Dubbo、Thrift等)都支持。

另外,应用中一个服务可能会调用多个依赖服务来处理业务,而这些依赖服务是可以同时调用的。如果顺序调用的话需要耗时100ms,而并发调用只需要50ms,那么可以使用Java并发机制来并发调用依赖服务,从而降低该服务的响应时间。

在开发应用系统过程中,通过异步并发并不能使响应变得更快,更多是为了提升吞吐量、对请求更细粒度控制,或是通过多依赖服务并发调用降低服务响应时间。当一个线程在处理任务时,通过Fork多个线程来处理任务并等待这些线程的处理结果,这种应用并不是真正的异步。异步是针对CPU和IO的,当IO没有就绪时要让出CPU来处理其他任务,这才是异步。本文不会介绍异步并发实现原理,主要介绍在Java应用中如何运用这些技术,而且大多数场景并不是真正的异步化,在Java中真正实现异步化是非常困难的事情,如MySQL JDBC驱动等很多都是BIO设计,大多数情况下说的异步并发是通过线程池模拟实现。

本文地址:Tomcat线程池配置方式 _http://longshunzhuangshi.com/wangzhanxitong/201.html  本文tag标签:Tomcat线程池配置方式

上一篇:认知电子商务网站

下一篇:给自己做SEO案例分析

猜你喜欢
推荐话题