詳解Tomcat三種運行模式(BIO, NIO, APR)的比較和場景分析

概述

Tomcat8.0起已經默認nio模式,不需要做修改,BIO模式也已經拋棄了,今天主要介紹下tomcat的三種運行模式:BIO、NIO、ARP。

詳解Tomcat三種運行模式(BIO, NIO, APR)的比較和場景分析


簡述及配置運行模式

1、bio:沒經過任何優化和處理,幾百併發性能極低下。

配置server.xml

<connector> connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
/<connector>

2、nio:利用java的異步io技術,no blocking IO技術.

詳解Tomcat三種運行模式(BIO, NIO, APR)的比較和場景分析

配置server.xml

<connector> connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
/<connector>

3、apr模式

安裝最困難,操作系統級別的控制,但也是在Tomcat上運行高併發應用的首選模式。

<connector> connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
/<connector>

配置apr模式之後還需要安裝 apr 、 apr-utils 、tomcat-native包

(1)apr 安裝

# tar zxf apr-1.5.2.tar.gz -C /usr/local/src/
# cd /usr/local/src/apr-1.5.2/
# ./configure --prefix=/usr/local/apr && make && make install

(2)apr-utils 安裝

# tar zxf apr-util-1.5.4.tar.gz -C /usr/local/src/
# cd /usr/local/src/apr-util-1.5.4/
# ./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-utils && make && make install

(3)tomcat-native安裝

# cd /usr/local/apache-tomcat-7.0.65/bin/
# tar zxf tomcat-native.tar.gz
# cd tomcat-native-1.1.33-src/jni/native
# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/java/ && make && make install

(4)配置APR環境變量

# vim /etc/profile
新增配置以下配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
使配置生效
# source /etc/profile

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

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

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

AIO方式使用於連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用OS參與併發操作,編程比較複雜,JDK7開始支持。

這三種模式的不同之處如下:

  • BIO:

一個線程處理一個請求。缺點:併發量高時,線程數較多,浪費資源。

Tomcat7或以下,在Linux系統中默認使用這種方式。

  • NIO:

利用Java的異步IO處理,可以通過少量的線程處理大量的請求。

Tomcat8在Linux系統中默認使用這種方式。

  • APR:

即Apache Portable Runtime,從操作系統層面解決io阻塞問題。

Tomcat7或Tomcat8在Win7或以上的系統中啟動默認使用這種方式。

官方對這三種的區別的詳細說明:

詳解Tomcat三種運行模式(BIO, NIO, APR)的比較和場景分析

Tomcat啟動的時候,可以通過log看到Connector使用的是哪一種運行模式:

  • Starting ProtocolHandler ["http-bio-8080"]
  • Starting ProtocolHandler ["http-nio-8080"]
  • Starting ProtocolHandler ["http-apr-8080"]

詳解Tomcat三種運行模式(BIO, NIO, APR)的比較和場景分析

個人覺得在 tomcat bio、nio、apr 模式中,每種都會有各自適用的場合,也不能說哪個好那個不好,就像 tomcat 內存方面的配置,如果內存設置的過大,gc 垃圾回收機制就會變慢;如果內存設置的過小,tomcat又會出現內存溢出的情況,所以設置在一個合適的範圍很重要,不僅不會出錯,並且gc回收頻繁使性能達到一個最優的結果。當然,這也需要根據不同的場合進行不同的測試才能產生最優的結果!

後面會分享更多關於devops和DBA方面的內容,感興趣的朋友可以關注下!!

詳解Tomcat三種運行模式(BIO, NIO, APR)的比較和場景分析


分享到:


相關文章: