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


這三種模式的不同之處如下:
- BIO:
一個線程處理一個請求。缺點:並發量高時,線程數較多,浪費資源。
Tomcat7或以下,在Linux系統中默認使用這種方式。
- NIO:
利用Java的異步IO處理,可以通過少量的線程處理大量的請求。
Tomcat8在Linux系統中默認使用這種方式。
Tomcat7必須修改Connector配置來啟動:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" redirectPort="8443"/>
- APR:
即Apache Portable Runtime,從操作系統層面解決io阻塞問題。
Tomcat7或Tomcat8在Win7或以上的系統中啟動默認使用這種方式。
Linux如果安裝了apr和native,Tomcat直接啟動就支持apr。(安裝方法:http://www.cnblogs.com/nb-blog/p/5278502.html)
官方對這三種的區別的詳細說明:
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
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"]
http://blog.csdn.net/l1028386804/article/details/69663493