Tomcat性能优化

系统 1859 0

Tomcat6.18版本:apache-tomcat-6.0.18

 

Why

每个web客户端请求对于服务器端来说就一个单独的线程,客户端的请求数量增多将会导致线程数就上去了,CPU就忙着跟线程切换。

而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe或者队列里的请求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可伸缩性。


 

大家都听说了在 Apache Tomcat 6 中支持了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 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 )   
  6. at java.lang.Thread.run(Thread.java: 595 )   
  7. 2011 - 8 - 2   9 : 03 : 53  org.apache.coyote.ajp.AjpAprProtocol destroy   
  8. 信息: 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性能优化


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论