tomcat啟動nio,apr詳解以及配置
前言
在正文開始之前,我們先在idea工具中看看啟動的信息,順便看下啟動的基本信息
在這里插入圖片描述
可以看到信息有
tomcat版本
操作系統版本
java版本
tomcat 的CATALINA_BASE 和 CATALINA_HOME ,也就是tomcat 的安裝版本
tomcat的jvm大小 等等基本信息
啟動的時候也可以看下信息是否正確來確保你的項目啟動沒有問題
好了,正文開始,我們了解一下啟動tomcat的日志信息
一般我們啟動 startup.bat 的時候,啟動成功會看到如下信息,
在圖中我們可以看到,
【http-nio-8091】
【ajp-nio-8092】
這兩行表示:
http 的方式是以nio 的模式來啟動的
ajp 的方式是以nio 的模式來啟動的
那么問題來了,http協議我們知道,ajp協議是什么??
看過tomcat的server.xml配置文件的,會了解到里面有這兩個連接器
1)HTTP Connector
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
擁有這個連接器,Tomcat才能成為一個web服務器,還可以處理Servlet和jsp。
2)AJP Connector
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
AJP連接器可以通過AJP協議和另一個web容器進行交互。
到這里我們就知道,AJP 他的作用就是負責和其他的HTTP服務器建立連接
例如和apche服務器連接,有了這個協議,才可以把apche服務器和tomcat服務器給連接起來
那么 【http-nio-8091】 中的 http 和ajp 我們都了解了, 那么第二個參數nio是什么???
第二個參數代表的是tomcat的請求連接方式是什么樣的。
在tomcat中連接方式一共有3種,往下看詳解
tomcat有3種方式啟動,分別是bio,nio,apr
什么是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生產環境運行的首選方式
如圖
1)bio的啟動信息
2)nio模式的啟動信息
3)apr模式的啟動信息
我們需要做的是把 http 和 ajp 都改成 用apr 的方式啟動
tomcat8以及之后的版本默認都是以NIO的模式啟動,如果要啟動apr,需要自己設置
1)windows下設置用apr啟動:
windows下已經安裝有apr的支持,所以直接在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" />
這樣之后,http就是以apr的模式啟動了,
效果如下
但是 ajp 沒有啟動apr,所以我們還需要再進行下一步操作
找到以下這行
<Connector port="8092" protocol="AJP/1.3" redirectPort="8443" />
修改成
<Connector port="8092" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
這樣之后,ajp 就是以apr的模式啟動了,
效果如下
HTTP和AJP 對應的協議,可以直接用前綴+協議名字填入到server.xml
例如 org.apache.coyote.http11.Http11NioProtocol
HTTP | AJP |
---|---|
前綴 org.apache.coyote.http11 | 前綴 org.apache.coyote.ajp |
HTTP | Http11Protocol | Http11NioProtocol | Http11AprProtocol |
AJP | AjpProtocol | AjpNioProtocol | AjpAprProtocol |
以上說的是在windows下開啟apr,那么linux也是可以開啟的,但是,linux默認沒有安裝apr的依賴,
所以需要我們自己安裝,具體的安裝內容會在我的下一篇博客,敬請期待~
最后來自網絡的總結:
Apr處理請求最快,Nio次之,Bio最慢;
Apr寬帶占用最高,Bio最低;但Apr的內存占用最高,而Nio的內存占用最低
所以綜合來看,Nio適用於一般需求;Apr適用於高並發需求