Tomcat效能最佳化

來源:互聯網
上載者:User

Tomcat6.18版本:apache-tomcat-6.0.18

 

Why

每個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)   
  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  
2011-8-2 9:03:53 org.apache.tomcat.util.net.AprEndpoint$Acceptor run嚴重: Socket accept failedorg.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,就說這麼多了!^_^

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.