`

tomcat8 connector和Executor的说明

阅读更多

 
tomcat 版本:8.0.15, connector和executor区别。

网上很多混淆了,异步servlet和非阻塞connector,一个是Executor,一个是connector,两者的工作阶段不同。

 

connector:

这个是指,外部IP连接到服务器,好比抢票软件在抢12306的火车票,因此一坨一坨的连接到12306。因此,会有很多connection(连接),建立、维护、管理这些连接,这就是connector要做的事情。显然这是web服务器性能的重要指标。即,可支持的每秒最大连接数。

connector,可以采用,blocking I/O,nio,ajp,apr

Servlet:

一个Servelet,就是一个线程一次的执行过程。比如响应doGet(),这个是在一个独立的线程中完成的。

当connector建立连接后,服务器会分配一个线程(可能是从线程池)去服务这个连接,即执行doGet等方法,执行完,回收线程。显然这一步是一个同步的过程,tomcat对应的是Executor

 

  • 显然,具体实现由多种方式:connector和Servlet可以共用一个线程,这种web服务方案,即为 每连接一个线程 Connection per thread。每次来个请求,服务器便创建一个线程(或者线程池中选择线程)由于线程不可能无限制增加,当线程比较多时,服务负载会很大。

这种方式的优点是,简单,适合CPU型

 

  •  Request per thread 每请求一个线程,即等到具体服务请求时,才独立分配线程方式。而这个线程通常是在线程池中分配,如果没有空闲的执行线程,那么请求会被挂起,当请求挂起的数目(即排队数)超过预设最大请求数(tomcat中maxConnections值),服务会拒绝服务器(Service Unavailable)。apache,tomcat等主流实现方案都采用这种方式。 

说明:网上很多人都以为,第二种方式,实现了高并发、高吞吐。其实,是因为第二种模型是适合常见的web服务特点,即大量的短连接(IO密集型,服务处理时间很短,大约50ms以内,但连接数很多),处理完即关闭连接,当服务是批处理类的大作业服务(CPU密集型,服务处理时间很长,常需要1秒以上,但连接数少),第二种方式不如第一种,每连接就分配一个线程运行。

 

此时,Connector和Servlet(Executor)也可以不共用一个线程,一个维护连接,Executor用独立的线程来服务,

tomcat采用的就是这种方式。而维护连接connector部分,常见的可以采用阻塞和非阻塞方式。实际上,tomcat8提供4种protocol:

org.apache.coyote.http11.Http11Protocol - blocking Java connector
org.apache.coyote.http11.Http11NioProtocol - non blocking Java connector
org.apache.coyote.http11.Http11Nio2Protocol - non blocking Java connector
org.apache.coyote.http11.Http11AprProtocol - the APR/native connector.

tomcat8.0.15原文文档如下:

Each incoming request requires a thread for the duration of that request. If more simultaneous requests are received than can be handled by the currently available request processing threads, additional threads will be created up to the configured maximum (the value of the maxThreads attribute). If still more simultaneous requests are received, they are stacked up inside the server socket created by the Connector, up to the configured maximum (the value of the acceptCount attribute). Any further simultaneous requests will receive "connection refused" errors, until resources are available to process them.

 

可以看出,tomcat使用了线程池,线程最多增加到maxThreads ,如果还有请求进来,那么这些请求就会wait在connector上,如果connector上wait的请求超出了acceptCount ,那么服务器就返回 "connection refused"拒绝连接错误。

 

所以,此时,Servlet的线程数,最大maxThreads ,但连接数则最大为acceptCount

_________________________________________________________________________________

 

 

CONNECTOR之间的比较 

  Java Blocking Connector
BIO Java Nio Blocking Connector
NIO Java Nio2 Blocking Connector
NIO2 APR/native Connector
APR Classname Tomcat Version Support Polling Polling Size Read HTTP Request Read HTTP Body Write HTTP Response Wait for next Request SSL Support SSL Handshake Max Connections
Http11Protocol Http11NioProtocol Http11Nio2Protocol Http11AprProtocol
3.x onwards 6.x onwards 8.x onwards 5.5.x onwards
NO YES YES YES
N/A maxConnections maxConnections maxConnections
Blocking Non Blocking Non Blocking Blocking
Blocking Sim Blocking Blocking Blocking
Blocking Sim Blocking Blocking Blocking
Blocking Non Blocking Non Blocking Non Blocking
Java SSL Java SSL Java SSL OpenSSL
Blocking Non blocking Non blocking Blocking
maxConnections maxConnections maxConnections maxConnections

 

 

Connecotr和Executor的关系,其实可以类比nginx的主进程和工作进程

分享到:
评论

相关推荐

    tomcat8源码

    Tomcat使用Executor线程池来处理请求,允许开发者根据应用需求调整线程数量和超时策略,提高并发性能。 通过研究Tomcat8的源码,我们可以深入理解其内部工作流程,学习如何定制和优化服务器配置,以适应不同的Web...

    tomcat8源码的maven项目

    1. **Tomcat8**:Tomcat 8是Tomcat服务器的第8个主要版本,它支持Java Servlet 3.1、JavaServer Pages(JSP)2.3和Java Expression Language(EL)3.0等技术标准。这个标签暗示我们可以通过源码分析了解Tomcat如何...

    Tomcat 服务器windows和linux 版本

    server.xml定义了服务器的整体结构,包括连接器(Connector)、全局JNDI资源、Executor线程池等关键元素。web.xml则规定了Web应用的基本行为,例如过滤器、监听器、session配置等。context.xml用于配置特定Web应用的...

    tomcat8压缩包

    - **server.xml**:这是Tomcat的主要配置文件,定义了服务器的各个组件,如Connector(处理网络连接)、Executor(线程池)和Context(应用上下文)等。 - **web.xml**:每个Web应用都有一个web.xml文件,用来配置...

    解析Tomcat处理请求的类Connector<三>

    至于“工具”标签,`Connector`类的配置和管理通常在Tomcat的`server.xml`配置文件中进行。这里可以设置端口号、最大连接数、超时时间等参数,以适应不同的应用场景。 在提供的文件`tcnative-1.dll`中,我们可以...

    Tomcat版本8

    **Apache Tomcat 8** 是一个广泛使用的开源Java Servlet容器,它实现了Java EE Web应用程序的规范,特别是Servlet和JavaServer Pages (JSP) 技术。这个版本是8.0.48,专为64位Windows操作系统设计。在本文中,我们将...

    apache-tomcat-6.0.35和apache-tomcat-6.0.35 src

    - Tomcat 6.0.35虽已过时,但了解其工作原理有助于理解后续版本的变化,如Tomcat 7、8和9的改进和新特性。 总之,Apache Tomcat 6.0.35是一个广泛使用的Servlet容器,提供了解析和执行JSP页面的能力,且具有轻量级...

    深入剖析Tomcat+源码.zip

    书中详细解释了Tomcat的核心组件,包括Connector、Executor、Request Processor、Context、Loader、Wrapper等,这些组件协同工作,构成了Tomcat服务器的基础架构。 1. **Connector组件**:这是Tomcat接收和响应HTTP...

    Tomcat 接口文档 API

    8. **JMX (Java Management Extensions)**: Tomcat使用JMX暴露管理MBeans(Managed Beans),允许通过JMX代理远程监控和管理Tomcat服务器的状态,包括启动/停止应用、查看线程池状态、调整配置等。 9. **Clustering...

    TOMCAT源代码,包括转载得别人的分析

    Tomcat使用Executor接口和线程池来管理并发请求,以优化性能和资源利用率。 7. **安全与认证**: Tomcat支持多种安全模型,包括基本认证、 Digest认证、FORM认证等。它还提供了安全管理器和Realm配置,用于控制...

    tomcat日志切割和tomcat优化

    日志切割是保持日志文件大小合理、便于管理和分析的重要手段,而Tomcat优化则关乎服务器的稳定性和响应速度。在这个场景中,我们提到的"Cronolog"是一个用于日志切割的工具,它常被应用在Linux环境中。 1. Tomcat...

    基于tomcat的连接数与线程池详解

    Tomcat 7和Tomcat 8的默认protocol处理逻辑不同,根据是否有APR本地库的支持来选择BIO或APR,而在Tomcat 8.5和Tomcat 9.0,不再支持BIO。 连接数和线程池的配置直接关联到Tomcat的性能和资源消耗。连接数决定了...

    tomcat6.0.35_tomcat_

    随着技术的发展,Tomcat的后续版本引入了更多特性,例如支持Java EE 7的Tomcat 7和8,以及目前最新的Tomcat 9。尽管Tomcat 6.0.35是一个稳定版本,但为了获得最新的安全更新和功能,建议用户适时升级到更高版本。 ...

    How Tomcat Work 电子书+源码

    1. **启动过程**:Tomcat在启动时会加载服务器配置文件(如server.xml),解析并构建服务器的内部结构,包括Connector、Executor、Engine、Host和Context等组件。 2. **HTTP连接器**:Tomcat通过Connector接收HTTP...

    tomcat 架构解析和优化。pdf

    8. **日志与监控**:设置合适的日志级别和格式,使用监控工具(如JMX)定期检查Tomcat状态,以便及时发现和解决问题。 9. **热更新与热部署**:理解如何在不中断服务的情况下更新应用,提高运维效率。 10. **连接...

    tomcat压缩包

    8. **日志系统**:Tomcat内置了日志系统,通过配置`logging.properties`文件,可以定制日志输出,便于调试和监控。 9. **连接器(Connector)**:Tomcat通过连接器组件与网络通信,比如HTTP/1.1连接器,负责接收和...

    tomcat6.0.18 解压缩版

    例如,`server.xml`中的`Executor`元素可以定制线程池,`Connector`元素的`maxThreads`和`minSpareThreads`属性可以设定最大和最小线程数量。 10. **集群和负载均衡**: 对于高可用性和负载均衡的需求,Tomcat可以...

    apache-tomcat-6.0.16.rar

    对于初学者,理解Tomcat的工作原理,如如何配置Context、Connector和Executor,以及如何部署Web应用,是学习Java Web开发的基础。 在压缩包子文件的文件名称列表中,"apache-tomcat-6.0.16.exe"可能是Windows平台上...

    apache-tomcat-6.0.33.zip

    - **server.xml**:主配置文件,定义了Tomcat服务器的全局配置,如端口号、Connector、Executor、GlobalNamingResources和Context等。 - **context.xml**:用于定义特定应用程序的上下文配置,可以放置在每个Web...

Global site tag (gtag.js) - Google Analytics