`

浅析tomcat nio 配置

 
阅读更多

并发测试,发现tomcat6.x nio下比jboss并发要好很多,特意看一下,jboss是bio。

Tomcat 6.X实现了JCP的Servlet 2.5和JSP2.1的规范,并且包括其它很多有用的功能,使它成为开发
和部署web应用和web服务的坚实平台。
NIO (No-blocking I/O)从JDK 1.4起,NIO API作为一个基于缓冲区,并能提供非阻塞I/O操作的API
被引入。

作为开源web服务器的java实现,tomcat几乎就是web开发者开发、测试的首选,有很多其他商业服务
器的开发者也会优先选择tomcat作为开发时候使用,而在部署的时候,把应用发布在商业服务器上。也有
许多商业应用部署在tomcat上,tomcat承载着其核心的应用。但是很多开发者很迷惑,为什么在自己的应
用里使用tomcat作为平台的时候,而并发用户超过一定数量,服务器就变的非常繁忙,而且很快就出现了
connection refuse的错误。但是很多商业应用部署在tomcat上运行却安然无恙。

其中有个很大的原因就是,配置良好的tomcat都会使用APR(Apache Portable Runtime),APR是
Apache HTTP Server2.x的核心,它是高度可移植的本地库,它使用高性能的UXIN I/O操作,低性能的
java io操作,但是APR对很多Java开发者而言可能稍稍有点难度,在很多OS平台上,你可能需要重新编
译APR。但是从Tomcat6.0以后, Java开发者很容易就可以是用NIO的技术来提升tomcat的并发处理能力。
但是为什么NIO可以提升tomcat的并发处理能力呢,我们先来看一下java 传统io与 java NIO的差别。

Java 传统的IO操作都是阻塞式的(blocking I/O), 如果有socket的编程基础,你会接触过堵塞socket和
非堵塞socket,堵塞socket就是在accept、read、write等IO操作的的时候,如果没有可用符合条件的资
源,不马上返回,一直等待直到有资源为止。而非堵塞socket则是在执行select的时候,当没有资源的时
候堵塞,当有符合资源的时候,返回一个信号,然后程序就可以执行accept、read、write等操作,一般来
说,如果使用堵塞socket,通常我们通常开一个线程accept socket,当读完这次socket请求的时候,开一
个单独的线程处理这个socket请求;如果使用非堵塞socket,通常是只有一个线程,一开始是select状,
当有信号的时候可以通过 可以通过多路复用(Multiplexing)技术传递给一个指定的线程池来处理请求,然
后原来的线程继续select状态。 最简单的多路复用技术可以通过java管道(Pipe)来实现。换句话说,如果
客户端的并发请求很大的时候,我们可以使用少于客户端并发请求的线程数来处理这些请求,而这些来不
及立即处理的请求会被阻塞在java管道或者队列里面,等待线程池的处理。请求 听起来很复杂,在这个架
构当道的java 世界里,现在已经有很多优秀的NIO的架构方便开发者使用,比如Grizzly,Apache Mina等
等,如果你对如何编写高性能的网络服务器有兴趣,你可以研读这些源代码。

简单说一下,在web服务器上阻塞IO(BIO)与NIO一个比较重要的不同是,我们使用BIO的时候往往会
为每一个web请求引入多线程,每个web请求一个单独的线程,所以并发量一旦上去了,线程数就上去
了,CPU就忙着线程切换,所以BIO不合适高吞吐量、高可伸缩的web服务器;而NIO则是使用单线程(单
个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe或者队列里的请
求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可
伸缩性。

我们来看一下配置,你只需要在server.xml里把 HTTP Connector做如下更改,

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />

然后启动服务器,你会看到org.apache.coyote.http11.Http11NioProtocol start的信息,表示NIO已经启动。其他的配置请参考官方配置文档。

Enjoy it.

分享到:
评论

相关推荐

    手写 tomcat nio

    【标题】:“手写 Tomcat NIO” 在深入探讨手写Tomcat NIO之前,我们首先需要理解NIO(Non-blocking I/O)的概念。NIO是Java提供的一个用于替代传统I/O模型(即BIO,Blocking I/O)的库。在BIO中,每个连接都需要一...

    tomcat7.0.69 + nio + redis session共享 配置优化版

    此版本在Tomcat7.0.69 的基础上...2、 启用nio 和 线程池配置 (server.xml) 3、修改了context.xml ,添加redis 支持(注意redis 连接密码) 4、在Root目录添加了test.jsp 用于查看多tomcat集群时sessionId是否一直

    tomcat8.5.56_X64_nio2模式性能优化版+垃圾处理机制.zip

    【标题】:“Tomcat 8.5.56 X64 NIO2模式性能优化版+垃圾处理机制.zip”指的是一个特别针对Windows x64平台优化的Tomcat 8.5.56版本,该版本集成了NIO2(非阻塞I/O)模式,并对垃圾收集(Garbage Collection, GC)...

    3-5Tomcat响应请求源码与nio处理请求源码实现.mp4

    3-5Tomcat响应请求源码与nio处理请求源码实现.mp4

    apache_tomcat配置

    这个文本文件可能包含了配置示例或者步骤说明,内容可能包括如何设置服务器端口、添加新的虚拟主机、配置连接器(如NIO、APR)、安全管理、JVM内存设置等。为了充分利用这个资源,你需要打开文件并详细阅读,理解每...

    tomcat服务参数配置

    ### Tomcat服务参数配置详解 #### 一、Tomcat简介及安装 Tomcat是一款开源的Servlet容器,由Apache软件基金会下属的Jakarta项目开发。它实现了对Servlet和JavaServer Pages (JSP)技术的支持,并提供了作为Web...

    tomcat 1000/s 并发配置

    下面将详细阐述如何针对"tomcat 1000/s 并发配置"进行优化。 首先,我们需要了解Tomcat的并发原理。Tomcat使用线程池来处理HTTP请求,每个请求都会分配一个工作线程进行处理。因此,优化的关键在于合理配置线程池...

    jiajianrong#documents#理解tomcat nio1

    tomcat默认的 HTTP connector 是阻塞的,并且每个连接对应一个线程。这会造成线程资源的浪费,因为连接本身可能不一定频繁被使用,而是仅仅被用来k

    tomcat集群配置

    当我们需要提高应用的可用性、可伸缩性和性能时,通常会考虑配置Tomcat集群。本篇文章将深入探讨如何进行Tomcat集群的配置。 **一、集群的概念** 集群是指将多个独立的服务器节点通过网络连接起来,共同对外提供...

    关于tomcat的配置

    本文将深入探讨Tomcat的配置,帮助读者理解如何优化和管理自己的Tomcat服务器。 首先,我们来看Tomcat的主配置文件——`server.xml`。这个文件位于Tomcat安装目录下的`conf`目录中,是整个Tomcat服务器的核心配置。...

    Tomcat 8.0版本 优化过

    Apache Tomcat 8.0是Java Servlet和JavaServer Pages(JSP)的开源Web应用服务器,由Apache软件基金会开发。这个版本的Tomcat在性能、稳定性以及安全性方面都有所提升,是许多企业和开发者的选择。针对Tomcat 8.0...

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡

    ### APACHE 2.2.9+TOMCAT6.0.18 配置负载均衡 #### 目标 本教程旨在通过使用 Apache 2.2.9 和 Tomcat 6.0.18 来搭建一个可以实际部署运行的 Web 网站。具体目标包括: 1. **实现 Apache 作为 HTTP 服务器**:...

    从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式

    Jetty、Tomcat和Mina都是Java领域中著名的Web服务器和应用服务器,它们在NIO架构上有着相似的设计模式。本文将从这三个框架中提炼出NIO构架网络服务器的经典模式,并逐一解析它们的核心机制。 首先,Jetty的NIO实现...

    tomcat配置 连接数(优化)

    标题中的“Tomcat配置连接数(优化)”指的是在Apache Tomcat服务器中调整与处理并发请求相关的设置,以提升服务器的性能和稳定性。这通常涉及到调整最大连接数、线程池大小、超时时间等核心参数。在高并发场景下,...

    59-Spring Boot内嵌Tomcat配置1

    内嵌的 Tomcat 容器是 Spring Boot 默认的 Web 服务器,使得我们可以无需额外配置即可运行 Java Web 应用。在本篇文章中,我们将探讨如何对 Spring Boot 内嵌的 Tomcat 进行个性化配置。 首先,Spring Boot 提供了 ...

    apache-tomcat-8.5.31.zip

    8. **性能优化**:Tomcat提供了多种性能优化选项,例如调整连接器配置(如线程池大小),启用HTTP/2支持,以及使用NIO或APR(Apache Portable Runtime)来提升I/O性能。 9. **社区支持**:Apache Tomcat有一个庞大...

    cipher-list-creator.jsp:为 Tomcat NIOBIO 连接器的 server.xml 创建密码列表

    目标环境Tomcat + JDK 使用 NIO/BIO 连接器进行 SSL。 在 Tomcat 7 + Java 7 / Tomcat 8 + Java 8 上测试,但写成 Tomcat 4.1 + JDK1.4.2 兼容。注意密码列表按推荐顺序排序。 接下来 Tomcat 将支持 Tomcat 8.0.21 /...

    Tomcat 配置(附带资料).rar

    《深入解析Tomcat配置》 Tomcat是一款广泛应用的开源Java Servlet容器,它是Apache软件基金会Jakarta项目的一部分。作为轻量级应用服务器,Tomcat能够处理Servlet、JSP以及WebSocket等Web应用程序,是开发者进行...

    tomcat服务器8.0版本 apache-tomcat-8.0.15.zip

    NIO(非阻塞I/O)和APR(Apache Portable Runtime)连接器提供更好的并发性能,使得Tomcat能更好地处理高并发请求。此外,改进的错误报告机制也有助于开发者快速定位问题。 在安全方面,Tomcat 8.0.15包含了一系列...

    tomcat:Java使用nio模式实现tomcat

    为了更好地处理大量并发请求,Tomcat可以配置为使用NIO连接器,即`org.apache.coyote.nio.NioEndpoint`。这种连接器利用Java NIO的非阻塞特性,允许单个线程服务多个客户端请求,提高了服务器的资源利用率和吞吐量。...

Global site tag (gtag.js) - Google Analytics