1. 程式人生 > >Tomcat 的三種(bio,nio.apr) 高階 Connector 執行模式

Tomcat 的三種(bio,nio.apr) 高階 Connector 執行模式

 tomcat 的Connector 有三種模式:bio,nio.apr;下面來說一下他們各自的特性:

Java BIO、NIO、AIO

同步 : 自己親自出馬持銀行卡到銀行取錢(使用同步IO時,Java自己處理IO讀寫)。

非同步 : 委託一小弟拿銀行卡到銀行取錢,然後給你(使用非同步IO時,Java將IO讀寫委託給OS處理,需要將資料緩衝區地址和大小傳給OS(銀行卡和密碼),OS需要支援非同步IO操作API)。

阻塞 : ATM排隊取款,你只能等待(使用阻塞IO時,Java呼叫會一直阻塞到讀寫完成才返回)。

非阻塞 : 櫃檯取款,取個號,然後坐在椅子上做其它事,等號廣播會通知你辦理,沒到號你就不能去,你可以不斷問大堂經理排到了沒有,大堂經理如果說還沒到你就不能去(使用非阻塞IO時,如果不能讀寫Java呼叫會馬上返回,當IO事件分發器會通知可讀寫時再繼續進行讀寫,不斷迴圈直到讀寫完成)。

Java對BIO、NIO、AIO的支援:

Java BIO : 同步並阻塞,伺服器實現模式為一個連線一個執行緒,即客戶端有連線請求時伺服器端就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷,當然可以通過執行緒池機制改善。

Java NIO : 同步非阻塞,伺服器實現模式為一個請求一個執行緒,即客戶端傳送的連線請求都會註冊到多路複用器上,多路複用器輪詢到連線有I/O請求時才啟動一個執行緒進行處理。

Java AIO(NIO.2) : 非同步非阻塞,伺服器實現模式為一個有效請求一個執行緒,客戶端的I/O請求都是由OS先完成了再通知伺服器應用去啟動執行緒進行處理

BIO、NIO、AIO適用場景分析:

BIO方式適用於連線數目比較小且固定的架構,這種方式對伺服器資源要求比較高,併發侷限於應用中,JDK1.4以前的唯一選擇,但程式直觀簡單易理解。

NIO方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,併發侷限於應用中,程式設計比較複雜,JDK1.4開始支援。

AIO方式使用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫OS參與併發操作,程式設計比較複雜,JDK7開始支援。

好,下面來看看tomcat 的 bio、nio、apr 模式

bio 
bio(blocking I/O),顧名思義,即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。Tomcat在預設情況下,就是以bio模式執行的。遺憾的是,就一般而言,bio模式是三種執行模式中效能最低的一種。我們可以通過Tomcat Manager來檢視伺服器的當前狀態。

nio 
Java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩衝區、並能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統I/O操作(bio)更好的併發執行效能。

apr 
(Apache Portable Runtime/Apache可移植執行庫),是Apache HTTP伺服器的支援庫。你可以簡單地理解為,Tomcat將以JNI的形式呼叫Apache HTTP伺服器的核心動態連結庫來處理檔案讀取或網路傳輸操作,從而大大地提高Tomcat對靜態檔案的處理效能。 Tomcat apr也是在Tomcat上執行高併發應用的首選模式。

在這之前,我們先把tomcat管理介面配置起來,以便等下能更方便的觀察我們的bio、nio、apr 模式

新增manager/status使用者

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">vim /usr/<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">local</span>/apache<span class="hljs-attribute" style="box-sizing: border-box;">-tomcat</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.47</span>/conf/tomcat<span class="hljs-attribute" style="box-sizing: border-box;">-users</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">xml</span>
<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>role rolename<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"manager-gui"</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">/</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span>       
<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span>user username<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tomcat"</span> password<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"15715746746"</span> roles<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"manager-gui"</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">/</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

配置完重啟,通過ip:port/manager/status 就可以看tomcat狀態了,裡面有伺服器的資訊及tomcat資訊。

bio server.xml 配置 (重啟生效)

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">Connector</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">port</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"8080"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">protocol</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"HTTP/1.1"</span>
               <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">connectionTimeout</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"20000"</span>
               <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">redirectPort</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"8443"</span> /></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

nio server.xml 配置 (重啟生效)

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">Connector</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">port</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"8080"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">protocol</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"org.apache.coyote.http11.Http11NioProtocol"</span>
               <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">connectionTimeout</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"20000"</span>
               <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">redirectPort</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"8443"</span> /></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

apr server.xml 配置 (重啟生效)

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">Connector</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">port</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"8080"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">protocol</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"org.apache.coyote.http11.Http11AprProtocol"</span>
               <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">connectionTimeout</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"20000"</span>
               <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">redirectPort</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"8443"</span> /></span></code><code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">
</code>
 <span style="color: rgb(51, 51, 51); line-height: 17.4px; white-space: nowrap; background-color: rgb(240, 240, 240);">tomcat 支援apr步驟</span>

1.下載相關的工具包

 wget http://mirrors.aliyun.com/apache/apr/apr-1.5.2.tar.gz 
 
 wget http://mirrors.aliyun.com/apache/apr/apr-util-1.5.4.tar.gz 

 tomcat的bin目錄下的tomcat-native.tar.gz檔案複製到
/usr/local/apr

2. 安裝 

    #tar zxvf apr-1.5.2.tar.gz 
    #cd apr-1.5.2
    #./configure --prefix=/usr/local/apr ;make;make install

    #tar zxvf apr-util-1.5.4.tar.gz
    #cd apr-util-1.5.4  
    #./configure --prefix=/usr/local/apr/apr-util --with-apr=/usr/local/apr;make;make install

     tar zxvf tomcat-native-1.1.20-src.tar.gz 
    cd tomcat-native-1.1.20-src/jni/native   
   ./configure --with-apr=/usr/local/apr;make;make install
   

3設定 Tomcat 整合 APR
    修改 tomcat 的啟動 shell (startup.sh),在該檔案中加入啟動引數:
      CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" 。
 
 4判斷安裝成功:
    如果看到下面的啟動日誌,表示成功。
     2016 11:11:41 上午 org.apache.coyote.AbstractProtocol start   Starting ProtocolHandler ["http-apr-8280"]


ps : apr安裝目錄為啥是/usr/local/apr,我最早安裝在 /opt/apr 目錄下,我們生產環境java相關的都在這個目錄,但最後安裝tomcat-native時,<span style="font-family: Arial, Helvetica, sans-serif;">他將所有的jar都安裝到了/usr/local/apr/lib 目錄下,為了前後目錄的統一,最後都安裝在/usr/local/apr目錄下</span>

到這裡大致的配置就結束了,建議在做實驗之前,先了解清楚java的 bio 、nio 、aio特性,在web伺服器上阻塞IO(BIO)與NIO一個比較重要的不同是,客戶系統使用BIO的時候往往會為每一個web請求引入多執行緒,每個web請求一個單獨的執行緒,所以併發量一旦上去了,執行緒數就上去了,CPU就忙著執行緒切換,所以BIO不合適高吞吐量、高可伸縮的web伺服器;而NIO則是使用單執行緒(單個CPU)或者只使用少量的多執行緒(多CPU)來接受Socket,而由執行緒池來處理堵塞在pipe或者佇列裡的請求.這樣的話,只要OS可以接受TCP的連線,web伺服器就可以處理該請求。大大提高了web伺服器的可伸縮性。

下面是我自己的一些效能測試表格,通過jmeter壓測軟體(jmeter軟體使用自行百度)在本地測試的(為了資料的有效以及準確性,我沒測試10分鐘,也就是進行一次測試,都會重啟linux主機及重新開啟jmeter軟體。),當然你也可以選擇通過 雲主機、自己機房的伺服器以及虛擬機器等測試,測試當中會涉及到很多點,例如(磁碟io、頻寬、記憶體、cpu、以及核心配置中的tcp各種狀態,甚至是各種開啟檔案限制,都會影響到我們的測試結果)

這裡寫圖片描述

可以看到,隨著執行緒的不斷增多,bio 模式效能越來越差,就算是在本地,錯誤率和響應時間都在明顯的增加、而吞吐量、樣本數和每秒傳輸速率都在下降(當然,如果是生產環境,我們肯定通過nginx web 軟體進行反向代理,提供多個tomcat 節點來提供更穩定的服務。)

而 bio 和 apr模式基本上沒有變化太多,都保持在一個穩定的狀態。

而後來當我進行一些 service 後端程式的測試時,發現 tomcat 效能並沒有大幅度的提升,甚至會有下降的趨勢。(該介面不是在同網段測試,而是跨越路由器,在網路傳輸中會有損耗方面,效能跟本地測試也會有所差異)

這裡寫圖片描述

總結: 
個人覺得在 tomcat bio、nio、apr 模式中,每種都會有各自適用的場合,apr其實也是nio只不過他是作業系統級別的支援,nio是由java本身的nio支援的,也不能說哪個好那個不好。就像 tomcat 記憶體方面的配置,如果記憶體設定的過大,gc 垃圾回收機制就會變慢;如果記憶體設定的過小,tomcat又會出現記憶體溢位的情況,所以設定在一個合適的範圍很重要,不僅不會出錯,並且gc回收頻繁使效能達到一個最優的結果。當然,這也需要根據不同的場合進行不同的測試才能產生最優的結果!



相關推薦

Tomcat(bio,nio.apr) 高階 Connector 執行模式

 tomcat 的Connector 有三種模式:bio,nio.apr;下面來說一下他們各自的特性: Java BIO、NIO、AIO 同步 : 自己親自出馬持銀行卡到銀行取錢(使用同步IO時,Java自己處理IO讀寫)。 非同步 : 委託一小弟拿銀行卡到銀行取

Tomcat Connector執行模式BIO, NIO, APR)的比較和優化

                  Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector                              BIO                         NIO

Tomcat執行模式bio & nio & apr

Tomcat Connector(Tomcat聯結器)有bio、nio、apr三種執行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。 預設的模式,效能最

tomcat bio nio apr 模式 ---待自己整理

Tomcat支援三種接收請求的處理方式:BIO、NIO、APR  1>、BIO模式:阻塞式I/O操作,表示Tomcat使用的是傳統Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本預設情況下是以bio模式執行的,由於每個請求都要建立一個執行緒來處理,執行緒開銷較大,不能處理

apache和tomcat連線方式

首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠改為 80。

執行緒---建立方式例項;以及執行緒池的使用

1、繼承Thread類 繼承Thread類,重寫run方法(即要讓執行緒進行的操作), 建立執行緒例項,呼叫start()方法啟動執行緒。 import java.util.Date; /** * @author: ycz * @date: 2018/11/25 0025

併發伺服器實現方式之程序、執行緒和select

  前言:剛開始學網路程式設計,都會先寫一個客戶端和服務端,不知道你們有沒有試一下:再開啟一下客戶端,是連不上服務端的。還有一個問題不知道你們發現沒:有時啟伺服器,會提示“Address already in use”,過一會就好了,想過為啥麼?在這篇部落格會解釋這個問題。   但現實的伺服器都會連很多客戶

控制反轉IOC的依賴注入方式 【調侃】IOC前世今生 IoC模式 談談對Spring IOC的理解 一個簡單的小程式演示Unity的三種依賴注入方式 小菜學習設計模式(五)—控制反轉(Ioc) IoC模式(依賴、依賴倒置、依賴注入、控制反轉) IoC模式

轉自:https://www.cnblogs.com/ysyn/p/5563256.html 引言:    專案中遇到關於IOC的一些內容,因為和正常的邏輯程式碼比較起來,IOC有點反常。因此本文記錄IOC的一些基礎知識,並附有相應的簡單例項,而在實際專案中再複雜的應用也只是在

C++ 繼承方式和建構函式執行的順序

C++中的繼承方式有:   public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。  (1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的

【Linux Is Not Unix】虛擬機器下CentOS配置ip方法(1)-橋接模式(bridge)

  在bridged模式下,VMWare虛擬出來的作業系統就像是區域網中的一臺獨立的主機,它可以訪問網內任何一臺機器。在bridged模式下,你需要手工為虛擬系統配置IP地址、子網掩碼,而且還要和宿

大話Spark(5)-圖詳述Spark Standalone/Client/Cluster執行模式

之前在 大話Spark(2)裡講過Spark Yarn-Client的執行模式,有同學反饋與Cluster模式沒有對比, 這裡我重新整理了三張圖分別看下Standalone,Yarn-Client 和 Yarn-Cluster的執行流程。 1、獨立(Standalone)執行模式  獨立執行模式是S

Tomcat Connector執行模式bionioapr

Tomcat Connector(Tomcat聯結器)有bio、nio、apr三種執行模式 bio bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。 預設的模式,效能最

Tomcat Connector運行模式

tomcat連接器 per OS 連接 rman sdn keyword 大量 pre Tomcat Connector(Tomcat連接器)有bio、nio、apr三種運行模式。 BIO bio(blocking I/O)是指阻塞式I/O操作,Tomcat在默認情況下

《轉載》Apache HTTP Server 與 Tomcat連接方式介紹

之前 img 6.2 自定義 con 訪問 ont 是什麽 bsp 本文轉載自IBM developer 首先我們先介紹一下為什麽要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務默認的端口是 8080,裝好 t

轉:Tomcat內存溢出的情況及解決辦法分析

個數 配置 param 釋放 blank pri 開始 clas ive Tomcat內存溢出的原因  在生產環境中tomcat內存設置不好很容易出現內存溢出。造成內存溢出是不一樣的,當然處理方式也不一樣。  這裏根據平時遇到的情況和相關資料進行一個總結。常見的一般會有下面

Tomcat Jboss Glassfish 常見web容器比較

用戶 sil 簡單 架構 開箱 .aspx app 規模 serve https://i.cnblogs.com/EditPosts.aspx?postid=7596859 Tomcat Jboss Glassfish 三種常見web容器比較<br>一、緣由: 

nginx反代httpd,實現tomcat代理模型至後端的tomcat服務器,會話綁定的方式

httpmod_jkajp 會話綁定 構建tomcat集群,實現前端一臺nginx反代,到後端的apache服務器,由apache負責向後端的tomcat服務器進行資源調度,這樣的模式比直接用nginx反代到後端主機,tomcat服務器所受到的壓力會更小,服務將會更加穩定,這樣的模式是經過實踐檢驗出來的。如

apache分別基於方案實現tomcat的代理、負載均衡及會話綁定

tomcat apacheapache分別基於mod_proxy_ajp, mod_proxy_http, mod_jk三種方案實現代理、負載均衡、會話綁定及Tomcat session cluster1、nginx, haproxy, apache(mod_proxy_ajp, mod_proxy_http

Tomcat 部署項目的方法

其他 strong 訪問 加載類 lse 定義 例子 文件 環境 1.Tomcat官網下載地址:http://tomcat.apache.org/ 2.Tomcat的目錄結構 3.部署方法: 1 直接將web項目文件件拷貝到webapps目錄中   這是最常用的方式,Tom

Java Web 項目發布到Tomcat部署方法

true app text 中新 xml文件 serve pac base win 第一種方法:在tomcat中的conf目錄中,在server.xml中的,節點中添加: <Context path="/" docBase="E:\TOMCAT\apache-tomc