1.tomcat NIO配置
今天在查看日誌時發現tomcat的Socket連接方式爲bio,於是我想既然有bio那肯定有nio。果然,一查就發現tomcat在6.0之後就可以配置nio的方式。nio方式比bio具有更好的併發性,如果Web應用需要更好的併發性能,當然是使用nio方式了。配置具體方法如下:
將Service.xml文件下的內容
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改爲
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
那麼在啓動tomcat時可以查看到tomcat已經以nio方式啓動
以此同時,爲了獲得更好的併發性還可以配置線程池
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" />
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
2.Tomcat Connector(Tomcat連接器)有bio、nio、apr三種運行模式
BIO
bio是阻塞式IO操作,使用java io技術,即每一個請求都要創建一個線程來進行處理。缺點:併發量高時,線程數較多,佔資源
NIO
使用java nio技術,能夠通過少量的線程處理大量的請求
nio是基於java中非阻塞IO操作的API實現,比傳統的i/o處理方式有更高的併發運行性能
APR
(Apache Portable Runtime/Apache可移植運行時庫)
apr是從操作系統級別解決異步IO問題,大幅度提高服務器的併發處理性能,也是Tomcat生產環境運行的首選方式
補充:tomcat8以及之後的版本默認都是以NIO的模式啓動,如果要啓動apr,需要自己設置。
①http 協議就是以apr的模式啓動(HTTP Connector)
將service.xml文件中
<Connector port="8091" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改成
<Connector port="8091" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" redirectPort="8443" />
②ajp 協議以apr的模式啓動(AJP Connector)
將service.xml文件中
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改成
<Connector port="8092" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
最後來看網絡的總結:
Apr處理請求最快,Nio次之,Bio最慢;
Apr寬帶佔用最高,Bio最低;但Apr的內存佔用最高,而Nio的內存佔用最低
所以綜合來看,Nio適用於一般需求;Apr適用於高併發需求