每个web客户端请求对于服务器端来说就一个单独的线程,客户端的请求数量增多将会导致线程数就上去了,CPU就忙着跟线程切换。
而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe或者队列里的请求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可伸缩性。
--------------------------------------------------------------------------------
大家都听说了在Apache Tomcat6 中支持了Java语言的特性 NIO( New I/O),不管你对NIO的技术是否熟悉,但你肯定能想象的到NIO是一个好东西。的确,使用NIO在服务器端会有更好的性能,加强服务器端对并发处理的性能。 请注意:很抱歉,在tomcat6在默认的配置选项中是没有把NIO功能打开。所以很多正在使用Tomcat6的朋友们本以为能快活的使用上NIO。
不信,你可以试试,从Apache Tomcat 站点下载 的Tomct6 压缩包中 conf/server.xml的 配置文件第69行,内容如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
进行测试,可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下:
2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2010-2-1 12:59:40 org.apache.catalina.startup.Catalina load
修改成支持NIO的类型,配置如下:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
进行测试,被打开nio配置,启动时的信息,如下:
2010-2-1 13:01:01 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
2010-2-1 13:01:01 org.apache.coyote.http11.Http11NioProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
这样才能让你真正体验到Tomcat6下NIO给你的系统带来的快感。
–end-
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
executor="tomcatThreadPool"
compression="on"
compressionMinSize="2048"
maxThreads="30000"
minSpareThreads="512"
maxSpareThreads="2048"
enableLookups="false"
redirectPort="8443"
acceptCount="35000"
debug="0"
connectionTimeout="40000"
disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
连接器使用的线程池的名子:executor="tomcatThreadPool"
连接器端口 :port="8090"
连接器使用的传输方式 :protocol="org.apache.coyote.http11.Http11NioProtocol"
传输时是否支持压缩 :compression="on"
压缩的大小 :compressionMinSize="2048"
3.设置Tomcat连接器池。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />
线程池名: name="tomcatThreadPool"
线程前缀: namePrefix="catalina-exec-"
最大产生线程数:maxThreads="1000"
最小初始现程数:minSpareThreads="350"
解决Tomcat APR - tcnative-1.dll引起的 “Socket accept failed WSACancelBlockingCall”问题 问题描述:
系统环境(在 Tomcat Server Status 中直接复制过来)
Tomcat Version JVM Version JVM Vendor OS Name OS Version OS Architecture
Apache Tomcat/6.0.32 1.6.0_20-b02 Sun Microsystems Inc. Windows XP 5.1 x86
在 Tomcat 的 $CATALINA_HOME/bin 目录下加了 tcnative-1.dll ,结果关闭服务时出现如下错误。
Logs/catalina.2011-08-02.log 代码
1.2011-8-2 9:03:53 org.apache.tomcat.util.net.AprEndpoint$Acceptor run
2.严重: Socket accept failed
3.org.apache.tomcat.jni.Error: A blocking operation was interrupted by a call to WSACancelBlockingCall.
4.at org.apache.tomcat.jni.Socket.accept(Native Method)
5.at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:1109)
2.at java.lang.Thread.run(Thread.java:595)
2.2011-8-2 9:03:53 org.apache.coyote.ajp.AjpAprProtocol destroy 3.信息: Stopping Coyote AJP/1.3 on ajp-8009 2011-8-2 9:03:53 org.apache.tomcat.util.net.AprEndpoint$Acceptor run
严重: Socket accept failed
org.apache.tomcat.jni.Error: A blocking operation was interrupted by a call to WSACancelBlockingCall.
at org.apache.tomcat.jni.Socket.accept(Native Method)
at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:1109)
at java.lang.Thread.run(Thread.java:595)
2011-8-2 9:03:53 org.apache.coyote.ajp.AjpAprProtocol destroy
信息: Stopping Coyote AJP/1.3 on ajp-8009
解决:
问题根源 :你下载的 tcnative-1.dll 文件不是 Tomcat 原始使用的那个版本文件
在 $CATALINA_HOME/webapps/docs/apr.html 打开其官方 Apache Portable Runtime (APR) 文档 描述,其 APR 包的源码在 bin/tomcat-native.tar.gz 归档文件中。所以,打开该文件就可以知道该 Tomcat native 的版本是多少,然后就到 Tomcat native 下载中心 下载相同版本的 tcnative-1.dll 和 openssl.exe 即可。问题搞定了, 就 这么简单!如果版本不一样,就可能会出现上面这个问题,这就是引起该问题的根源所在。
Ok,就说这么多了!^_^
分享到:
相关推荐
tomcat性能优化
Tomcat性能优化.rar Tomcat性能优化.rar
tomcat性能优化 调优 tomcat 性能优化 优化详解 优化步骤 优化过程
通过优化tomcat提高网站的并发能力。 2.服务器资源 服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。 3.优化配置
Tomcat性能优化 1. 操作系统2. JAVA 虚拟机3. Tomcat 自身的调整策略
Tomcat性能优化可从外部环境和自身调整两方面着手。 外部环境主要是Tomcat所在服务器的运行环境,包括操作系统层面、部署以及Java虚拟机的配置
Tomcat性能优化设置tomcat的java虚拟机参数catalina.sh/batWindows下修改 $tomcat$\ bin \ catalina.
tomcat性能优化.doc
Tomcat性能优化及JVM内存工作原理,适用于运维人员,开发人员
tomcat性能优化方案 按照此方法进行配置tomcat可以提高你服务器的性能。希望可以帮助到你。
tomcat性能优化,详细讲解,都有例子,非常实用。
Tomcat性能优化篇笔记.pdf
Tomcat 性能调整,tomcat参数调整,压力测试介绍
1.操作系统调优; 2.Java虚拟机调优; 3.Apache集成Tomcat; 4.【适用场景】 大量使用静态页面的应用系统; 5.【适用场景】 并发用户量及在线使用用户数量比较高的系统
在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError: Java heap space”,从而导致客户端显示500错误。
通过优化tomcat提高网站的并发能力。服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
主要介绍了tomcat性能优化方式简单整理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下