Tomcat6.18版本:apache-tomcat-6.0.18
?
Why
每個(gè)web客戶端請(qǐng)求對(duì)于服務(wù)器端來說就一個(gè)單獨(dú)的線程,客戶端的請(qǐng)求數(shù)量增多將會(huì)導(dǎo)致線程數(shù)就上去了,CPU就忙著跟線程切換。
而NIO則是使用單線程(單個(gè)CPU)或者只使用少量的多線程(多CPU)來接受Socket,而由線程池來處理堵塞在pipe或者隊(duì)列里的請(qǐng)求.這樣的話,只要OS可以接受TCP的連接,web服務(wù)器就可以處理該請(qǐng)求。大大提高了web服務(wù)器的可伸縮性。
?
大家都聽說了在 Apache Tomcat 6 中支持了Java語(yǔ)言的特性 NIO( New I/O),不管你對(duì)NIO的技術(shù)是否熟悉,但你肯定能想象的到NIO是一個(gè)好東西。的確,使用NIO在服務(wù)器端會(huì)有更好的性能,加強(qiáng)服務(wù)器端對(duì)并發(fā)處理的性能。? 請(qǐng)注意:很抱歉,在tomcat6在默認(rèn)的配置選項(xiàng)中是沒有把NIO功能打開。所以很多正在使用Tomcat6的朋友們本以為能快活的使用上NIO。
不信,你可以試試,從Apache Tomcat 站點(diǎn) 下載 的Tomct6 壓縮包中 conf/server.xml的 配置文件第 69 行,內(nèi)容如下:
??? <Connector port="8080" protocol="HTTP/1.1"
?????? connectionTimeout="20000"
??????? redirectPort="8443" />
進(jìn)行測(cè)試,可以在控制臺(tái)的啟動(dòng)信息里看見,
默認(rèn)狀態(tài)下
沒有被打開nio配置,啟動(dòng)時(shí)的信息,如下:
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" />
進(jìn)行測(cè)試,被打開nio配置,啟動(dòng)時(shí)的信息,如下:
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
這樣才能讓你真正體驗(yàn)到Tomcat6下NIO給你的系統(tǒng)帶來的快感。
–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"
傳輸時(shí)是否支持壓縮 ??????????? :compression="on"
壓縮的大小 ????????????????????????? :compressionMinSize="2048"
3.設(shè)置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- "
??????? 最大產(chǎn)生線程數(shù):maxThreads=" 1000"
??????? 最小初始現(xiàn)程數(shù):minSpareThreads=" 350"
?
?
?
?
問題描述:
系統(tǒng)環(huán)境(在 Tomcat Server Status 中直接復(fù)制過來)
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 ,結(jié)果關(guān)閉服務(wù)時(shí)出現(xiàn)如下錯(cuò)誤。
- 2011 - 8 - 2 ? 9 : 03 : 53 ?org.apache.tomcat.util.net.AprEndpoint$Acceptor?run ??
- 嚴(yán)重:?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 原始使用的那個(gè)版本文件
在 $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 即可。問題搞定了, 就 這么簡(jiǎn)單!如果版本不一樣,就可能會(huì)出現(xiàn)上面這個(gè)問題,這就是引起該問題的根源所在。
Ok,就說這么多了!^_^
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
