Tomcat Connector三種運行模式(BIO, NIO, APR)的比較和優化

Tomcat Connector的三種不一樣的運行模式性能相差很大,有人測試過的結果以下:apache

這三種模式的不一樣之處以下:併發

  • BIO:

一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。異步

Tomcat7或如下,在Linux系統中默認使用這種方式。性能

  • NIO:

利用Java的異步IO處理,能夠經過少許的線程處理大量的請求。測試

Tomcat8在Linux系統中默認使用這種方式。操作系統

Tomcat7必須修改Connector配置來啓動:.net

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 線程

         connectionTimeout="20000" redirectPort="8443"/> blog

  • APR:

即Apache Portable Runtime,從操做系統層面解決io阻塞問題。資源

Tomcat7或Tomcat8在Win7或以上的系統中啓動默認使用這種方式。

Linux若是安裝了apr和native,Tomcat直接啓動就支持apr。(安裝方法:http://my.oschina.net/lsw90/blog/181161

 

官方對這三種的區別的詳細說明:

                  Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector 
                             BIO                         NIO                       APR 
Classname                AjpProtocol               AjpNioProtocol           AjpAprProtocol 
Tomcat Version           3.x onwards                 7.x onwards              5.5.x onwards 
Support Polling              NO                          YES                       YES 
Polling Size                 N/A                   maxConnections             maxConnections 
Read Request Headers      Blocking                  Sim Blocking                   Blocking 
Read Request Body         Blocking                  Sim Blocking                   Blocking 
Write Response            Blocking                  Sim Blocking                   Blocking 
Wait for next Request     Blocking                  Non Blocking               Non Blocking 
Max Connections        maxConnections              maxConnections             maxConnections 

 

Tomcat啓動的時候,能夠經過log看到Connector使用的是哪種運行模式:

  • Starting ProtocolHandler ["http-bio-8080"]
  • Starting ProtocolHandler ["http-nio-8080"]
  • Starting ProtocolHandler ["http-apr-8080"]
相關文章
相關標籤/搜索