1. 程式人生 > >tomcat9更換執行模式為 Apr 模式

tomcat9更換執行模式為 Apr 模式

Tomcat支援三種接收請求的處理方式:BIO、NIO、APR 。

1. BIO由於每個請求都要建立一個執行緒來處理,執行緒開銷比較大,不能再高併發的場景,效能也是最低的。
2. NIO是一個基於緩衝區、並能提供非阻塞I/O操作的Java API,比傳統的bio更好的併發效能。
3. APR(Apache Portable Run-time libraries)簡單理解,就是從作業系統級別解決非同步IO問題,大幅度的提高伺服器的處理和響應效能, 也是Tomcat執行高併發應用的首選模式。 
* apr
* apr-iconv
* apr-util
* tomcat-native

安裝軟體

yum install -y apr-devel openssl-devel gcc make expat-devel libtool 

cd /usr/local/src
wget  https://mirrors.cnnic.cn/apache/apr/apr-1.6.5.tar.gz

tar xf apr-1.6.5.tar.gz
cd apr-1.6.5/
./configure --prefix=/usr/local/apr
make && make install

cd /usr/local/src
wget https://mirrors.cnnic.cn/apache/apr/apr-iconv-1.2.2.tar.gz
tar xf apr-iconv-1.2.2.tar.gz
cd apr-iconv-1.2.2/
./configure   --with-apr=/usr/local/apr  --prefix=/usr/local/apr-iconv
make && make install

cd /usr/local/src
wget  https://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz
tar xf apr-util-1.6.1.tar.gz  
cd apr-util-1.6.1/
./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr   --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make && make install

cd /usr/local/tomcat/bin/
tar xf tomcat-native.tar.gz
cd  /usr/local/tomcat/bin/tomcat-native-1.2.16-src/native

./configure --with-apr=/usr/local/apr  --with-java-home=/usr/local/jdk8.0     
make && make install

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib' >> /etc/profile

source /etc/profile

修改配置

vim /usr/local/tomcat/conf/server.xml

<Executor name="tomcatThreadPool" 
          namePrefix="catalina-exec-"
          maxThreads="300" 
          minSpareThreads="30"/>

<Connector     executor="tomcatThreadPool" 
               port="8080" 
               protocol="org.apache.coyote.http11.Http11AprProtocol"
               connectionTimeout="20000"
               redirectPort="8443"
               acceptCount="900"
               disableUploadTimeout="true"
               URIEncoding="UTF-8"
               enableLookups="false"
               compression="on"
               compressionMinSize="1024"
                />

<!-- Define an AJP 1.3 Connector on port 8009 -->  ##註釋掉下面那行,如果不用apache
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  -->    

測試

/usr/local/tomcat/bin/catalina.sh run

24-Jan-2018 21:39:17.695 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-80"]

 注:如果非root使用者啟動失敗,把apr環境變數在當前使用者的.bash_profile中寫一份

 配置說明

Executor重要引數說明:

name:共享執行緒池的名字。這是Connector為了共享執行緒池要引用的名字,該名字必須唯一。預設值:None;

namePrefix:在JVM上,每個執行執行緒都可以有一個name 字串。這一屬性為執行緒池中每個執行緒的name字串設定了一個字首,Tomcat將把執行緒號追加到這一字首的後面。預設值:catalina-exec-;

maxThreads:該執行緒池可以容納的最大執行緒數。預設值:150;

maxIdleTime:在Tomcat關閉一個空閒執行緒之前,允許空閒執行緒持續的時間(以毫秒為單位)。只有當前活躍的執行緒數大於minSpareThread的值,才會關閉空閒執行緒。預設值:60000(一分鐘)。

minSpareThreads:Tomcat應該始終開啟的最小不活躍執行緒數。預設值:4。

threadPriority:執行緒的等級。預設是Thread.NORM_PRIORITY


Connector重要引數說明:

maxThreads :Tomcat 使用執行緒來處理接收的每個請求,這個值表示 Tomcat 可建立的最大的執行緒數,預設值是 200

minSpareThreads:最小空閒執行緒數,Tomcat 啟動時的初始化的執行緒數,表示即使沒有人使用也開這麼多空執行緒等待,預設值是 10。

maxSpareThreads:最大備用執行緒數,一旦建立的執行緒超過這個值,Tomcat 就會關閉不再需要的 socket 執行緒。

上邊配置的引數,最大執行緒 500(一般伺服器足以),要根據自己的實際情況合理設定,設定越大會耗費記憶體和 CPU,因為 CPU 疲於執行緒上下文切換,沒有精力提供請求服務了,最小空閒執行緒數 20,執行緒最大空閒時間 60 秒,當然允許的最大執行緒連線數還受制於作業系統的核心引數設定,設定多大要根據自己的需求與環境。當然執行緒可以配置在“tomcatThreadPool”中,也可以直接配置在“Connector”中,但不可以重複配置。

URIEncoding:指定 Tomcat 容器的 URL 編碼格式,語言編碼格式這塊倒不如其它 WEB 伺服器軟體配置方便,需要分別指定。

connnectionTimeout: 網路連線超時,單位:毫秒,設定為 0 表示永不超時,這樣設定有隱患的。通常可設定為 30000 毫秒,可根據檢測實際情況,適當修改。

enableLookups: 是否反查域名,以返回遠端主機的主機名,取值為:true 或 false,如果設定為false,則直接返回IP地址,為了提高處理能力,應設定為 false。

disableUploadTimeout:上傳時是否使用超時機制。

connectionUploadTimeout:上傳超時時間,畢竟檔案上傳可能需要消耗更多的時間,這個根據你自己的業務需要自己調,以使Servlet有較長的時間來完成它的執行,需要與上一個引數一起配合使用才會生效。

acceptCount:指定當所有可以使用的處理請求的執行緒數都被使用時,可傳入連線請求的最大佇列長度,超過這個數的請求將不予處理,預設為100個。

keepAliveTimeout:長連線最大保持時間(毫秒),表示在下次請求過來之前,Tomcat 保持該連線多久,預設是使用 connectionTimeout 時間,-1 為不限制超時。

maxKeepAliveRequests:表示在伺服器關閉之前,該連線最大支援的請求數。超過該請求數的連線也將被關閉,1表示禁用,-1表示不限制個數,預設100個,一般設定在100~200之間。

compression:是否對響應的資料進行 GZIP 壓縮,off:表示禁止壓縮;on:表示允許壓縮(文字將被壓縮)、force:表示所有情況下都進行壓縮,預設值為off,壓縮資料後可以有效的減少頁面的大小,一般可以減小1/3左右,節省頻寬。

compressionMinSize:表示壓縮響應的最小值,只有當響應報文大小大於這個值的時候才會對報文進行壓縮,如果開啟了壓縮功能,預設值就是2048。

compressableMimeType:壓縮型別,指定對哪些型別的檔案進行資料壓縮。

noCompressionUserAgents="gozilla, traviata": 對於以下的瀏覽器,不啟用壓縮。

如果已經對程式碼進行了動靜分離,靜態頁面和圖片等資料就不需要 Tomcat 處理了,那麼也就不需要配置在 Tomcat 中配置壓縮了。