您的位置:首页 > 运维架构 > Tomcat

Tomcat性能优化

2016-11-14 12:49 225 查看
Tomcat性能优化:

每个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行,内容如下:

123  <Connector port="8080" protocol="HTTP/1.1"        connectionTimeout="20000"         redirectPort="8443" />
进行测试,可以在控制台的启动信息里看见,默认状态下没有被打开nio配置,启动时的信息,如下:

1

2

3

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的类型,配置如下:

123<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"               connectionTimeout="20000"               redirectPort="8443" />
进行测试,被打开nio配置,启动时的信息,如下:

1

2

3

4

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–

黄海的配置:

1234567891011121314<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连接器池。

1

<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="1000"
minSpareThreads="350"
/>

黄海在配置文件中添加了如下配置:

1<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 VersionJVM VersionJVM VendorOS NameOS VersionOS Architecture
Apache Tomcat/6.0.321.6.0_20-b02Sun Microsystems Inc.Windows XP5.1x86
在 Tomcat 的 $CATALINA_HOME/bin 目录下加了 tcnative-1.dll ,结果关闭服务时出现如下错误。Logs/catalina.2011-08-02.log 代码

1

2

3

4

5

6

7

8

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 即可。问题搞定了, 就 这么简单!如果版本不一样,就可能会出现上面这个问题,这就是引起该问题的根源所在。
纯属转载,原文地址:http://www.tbdazhe.com/archives/486 点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat 性能优化