優化1、Tomcat運行模式java
Tomcat支持三種接收請求的處理方式:BIO、NIO、APRapache
1)BIO模式:(blocking I/O)阻塞式I/O操做,表示Tomcat使用的是傳統Java I/O操做(即java.io包及其子包)。Tomcat8如下版本默認狀況下是以bio模式運行的(Tomcat8版本開始默認是以nio模式運行),因爲每一個請求都要建立一個線程來處理,線程開銷較大,不能處理高併發的場景,在三種模式中性能也最低。啓動tomcat看到以下日誌,表示使用的是BIO模式:tomcat
2)NIO模式:(new I/O)是Java SE 1.4及後續版本提供的一種新的I/O操做方式(即java.nio包及其子包)。是一個基於緩衝區、並能提供非阻塞I/O操做的Java API,它擁有比傳統I/O操做(bio)更好的併發運行性能。要讓Tomcat以nio模式來運行比較簡單,只須要在Tomcat安裝目錄/conf/server.xml文件中將以下配置:服務器
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
中的protocol屬性值改成:網絡
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
原來的protocol="HTTP/1.1"表示遵循http1.1協議,同時,也是一個最原始的未經優化的通訊協議,併發
啓動tomcat看到以下日誌,表示使用的是NIO模式:app
3)APR模式:(Apache Portable Runtime/Apache可移植運行時)是Apache HTTP服務器的支持庫,簡單理解,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態連接庫來處理文件讀取或網絡傳輸操做,從而大大地提升Tomcat對靜態文件的處理性能,就是從操做系統級別解決異步IO問題,大幅度的提升服務器的處理和響應性能, 也是Tomcat運行高併發應用的首選模式。異步
Tomcat 6.x版本從6.0.32開始就默認支持apr。
Tomcat 7.x版本從7.0.30開始就默認支持apr。
Tomcat apr運行模式的配置是三種運行模式之中相對比較麻煩的一種。據官方文檔所述,Tomcat apr須要如下三個組件的支持:高併發
APR啓用步驟:性能
1>安裝依賴包
yum install make gcc openssl-devel -y
2>下載安裝APR包
在官網下載(http://apr.apache.org/download.cgi):安裝包 apr-1.7.0.tar.gz,apr-util-1.6.1.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.7.0.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar -xf apr-1.7.0.tar.gz
cd apr-1.7.0
./configure --prefix=/usr/local/apr && make && make install
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 && make && make install
3>在Tomcat中安裝APR動態庫
cd apache-tomcat-7.0.94/bin
tar -xf tomcat-native.tar.gz
cd tomcat-native-1.1.32-src
./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr/ && make && make install
4>配置APR本地庫到系統共享庫搜索路徑中
方式一:
設置LD_LIBRARY_PATH和LD_RUN_PATH環境變量,指向/usr/local/apr/lib目錄,可配置到$HOME/.profile文件中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
方式二:
拷貝/usr/local/apr/lib目錄下全部動態庫到/usr/lib或/lib系統共享庫搜索目錄下便可。
cp /usr/local/apr/lib/libtcnative* /usr/lib/
方式三(推薦):
編輯$TOMCAT_HOME/bin/catalina.sh文件,在虛擬機啓動參數JAVA_OPTS中添加java.library.path參數,指定apr庫的路徑
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
5>修改Tomcat中conf/server.xml的配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
中的protocol屬性值改成:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" redirectPort="8443" />
6>運行Tomcat後,看到以下日誌表示APR模式啓動成功:
注意:若是沒有配置SSL相關參數,而且開啓了SSL,啓動時會發生org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform異常:
若是不想啓用SSL,將server.xml中apr模式下ssl關閉便可:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
將SSLEngine的值從on改爲off便可:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
4)禁用AJP協議
經過禁用AJP協議,達到在集羣的時候提升處理請求的時間。
咱們要作的就是要將此協議禁用,禁用方法:在conf/server.xml中,將
<Connector port="8112" protocol="AJP/1.3" redirectPort="8443" />
這行註釋掉,從新啓動tomcat,能夠看到控制檯上已經不存在上圖紅框中所示
<!-- <Connector port="8112" protocol="AJP/1.3" redirectPort="8443" /> -->