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


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適用於高並發需求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM