在正文開始之前,我們先在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適用於高併發需求