您好,登錄后才能下訂單哦!
本篇內容介紹了“Tomcat NIO的配置方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Tomcat 6.X實現了JCP的Servlet 2.5和JSP2.1的規范,并且包括其它很多有用的功能,使它成為開發和部署web應用和web服務的堅實平臺。
NIO (No-blocking I/O)從JDK 1.4起,NIO API作為一個基于緩沖區,并能提供非阻塞I/O操作的API被引入。
作為開源web服務器的java實現,tomcat幾乎就是web開發者開發、測試的***,有很多其他商業服務器的開發者也會優先選擇tomcat作為開發時候使用,而在部署的時候,把應用發布在商業服務器上。也有許多商業應用部署在tomcat上,tomcat承載著其核心的應用。但是很多開發者很迷惑,為什么在自己的應用里使用tomcat作為平臺的時候,而并發用戶超過一定數量,服務器就變的非常繁忙,而且很快就出現了connection refuse的錯誤。但是很多商業應用部署在tomcat上運行卻安然無恙。
其中有個很大的原因就是,配置良好的tomcat都會使用APR(Apache Portable Runtime),APR是Apache HTTP Server2.x的核心,它是高度可移植的本地庫,它使用高性能的UXIN I/O操作,低性能的java io操作,但是APR對很多Java開發者而言可能稍稍有點難度,在很多OS平臺上,你可能需要重新編譯APR。但是從Tomcat6.0以后, Java開發者很容易就可以是用NIO的技術來提升tomcat的并發處理能力。
但是為什么NIO可以提升tomcat的并發處理能力呢,我們先來看一下java 傳統io與 java NIO的差別。
Java 傳統的IO操作都是阻塞式的(blocking I/O), 如果有socket的編程基礎,你會接觸過堵塞socket和非堵塞socket,堵塞socket就是在accept、read、write等IO操作的的時候,如果沒有可用符合條件的資源,不馬上返回,一直等待直到有資源為止。而非堵塞socket則是在執行select的時候,當沒有資源的時候堵塞,當有符合資源的時候,返回一個信號,然后程序就可以執行accept、read、write等操作,一般來說,如果使用堵塞socket,通常我們通常開一個線程accept socket,當讀完這次socket請求的時候,開一個單獨的線程處理這個socket請求;如果使用非堵塞socket,通常是只有一個線程,一開始是select狀,當有信號的時候可以通過 可以通過多路復用(Multiplexing)技術傳遞給一個指定的線程池來處理請求,然后原來的線程繼續select狀態。 最簡單的多路復用技術可以通過java管道(Pipe)來實現。換句話說,如果客戶端的并發請求很大的時候,我們可以使用少于客戶端并發請求的線程數來處理這些請求,而這些來不及立即處理的請求會被阻塞在java管道或者隊列里面,等待線程池的處理。請求 聽起來很復雜,在這個架構當道的java 世界里,現在已經有很多優秀的NIO的架構方便開發者使用,比如Grizzly,Apache Mina等等,如果你對如何編寫高性能的網絡服務器有興趣,你可以研讀這些源代碼。
簡單說一下,在web服務器上阻塞IO(BIO)與NIO一個比較重要的不同是,我們使用BIO的時候往往會為每一個web請求引入多線程,每個web請求一個單獨的線程,所以并發量一旦上去了,線程數就上去了,CPU就忙著線程切換,所以BIO不合適高吞吐量、高可伸縮的web服務器;而NIO則是使用單線程(單個CPU)或者只使用少量的多線程(多CPU)來接受Socket,而由線程池來處理堵塞在pipe或者隊列里的請求.這樣的話,只要OS可以接受TCP的連接,web服務器就可以處理該請求。大大提高了web服務器的可伸縮性。
我們來看一下配置,你只需要在server.xml里把 HTTP Connector做如下更改,
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
改為
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
然后啟動服務器,你會看到org.apache.coyote.http11.Http11NioProtocol start的信息,表示NIO已經啟動。其他的配置請參考官方配置文檔。
Enjoy it.
***貼上官方文檔上對tomcat的三種Connector的方式做一個簡單比較。
Java Nio Blocking Connector | Java Nio Blocking Connector | APR Connector | |
Classname | Http11Protocol | Http11NioProtocol | Http11AprProtocol |
Tomcat Version | 3.x 4.x 5.x 6.x | 6.x | 5.5.x 6.x |
Support Polling | NO | YES | YES |
Polling Size | N/A | Unlimited - Restricted by mem | Unlimited |
Read HTTP Request | Blocking | Blocking | Blocking |
Read HTTP Body | Blocking | Blocking | Blocking |
Write HTTP Response | Blocking | Blocking | Blocking |
SSL Support | Java SSL | Java SSL | OpenSSL |
SSL Handshake | Blocking | Non blocking | Blocking |
Max Connections | maxThreads | See polling size | See polling size |
“Tomcat NIO的配置方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。