tomcat啓動nio,apr詳解以及配置

原文鏈接:https://www.cnblogs.com/leeego-123/p/11362259.html

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章