Tomcat Connector的三種不一樣的運行模式性能相差很大,有人測試過的結果以下:apache
這三種模式的不一樣之處以下:併發
一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。異步
Tomcat7或如下,在Linux系統中默認使用這種方式。性能
利用Java的異步IO處理,能夠經過少許的線程處理大量的請求。測試
Tomcat8在Linux系統中默認使用這種方式。操作系統
Tomcat7必須修改Connector配置來啓動:.net
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 線程
connectionTimeout="20000" redirectPort="8443"/> blog
即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使用的是哪種運行模式: