Linux下配置tomcat+apr+native应对高并发
一、三種運(yùn)行模式介紹
Tomcat 有三種(bio,nio.apr) 運(yùn)行模式,首先來簡單介紹下
bio?
bio(blocking I/O),顧名思義,即阻塞式I/O操作,表示Tomcat使用的是傳統(tǒng)的Java I/O操作(即java.io包及其子包)。Tomcat在默認(rèn)情況下,就是以bio模式運(yùn)行的。遺憾的是,就一般而言,bio模式是三種運(yùn)行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務(wù)器的當(dāng)前狀態(tài)。
nio?
是Java SE?1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基于緩沖區(qū)、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運(yùn)行性能。
想運(yùn)行在該模式下,直接修改server.xml里的Connector節(jié)點(diǎn),修改protocol為?
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
apr?
(Apache Portable Runtime/Apache可移植運(yùn)行庫),是Apache HTTP服務(wù)器的支持庫。你可以簡單地理解為,Tomcat將以JNI的形式調(diào)用Apache HTTP服務(wù)器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡(luò)傳輸操作,從而大大地提高Tomcat對靜態(tài)文件的處理性能。 Tomcat apr也是在Tomcat上運(yùn)行高并發(fā)應(yīng)用的首選模式。
要tomcat支持apr,必須要安裝apr和native,這樣tomcat可以利用apache的apr接口,使用操作系統(tǒng)的部分本地操作,從而提升性能。
Tomcat的運(yùn)行模式有3種.修改他們的運(yùn)行模式.3種模式的運(yùn)行是否成功,可以看他的啟動控制臺,或者啟動日志.或者登錄他們的默認(rèn)頁面http://localhost:8080/查看其中的服務(wù)器狀態(tài)。?
接下來介紹linux下tomcat+apr+native配置
?
二、linux下配置tomcat+apr+native
2.1 安裝包準(zhǔn)備
jdk-7u76-linux-x64.tar.gz(必須JDK1.7以上才支持apr)
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
apache-tomcat-7.0.56.tar.gz(解壓之后其bin目錄下包含tomcat-native的安裝包)
2.2 安裝JDK
這是運(yùn)行Tomcat的首要環(huán)境,所以這一步最先執(zhí)行。
2.2.1 解壓
tar -zxvf jdk-7u76-linux-x64.tar.gz2.2.2 創(chuàng)建/usr/local/java文件夾
mkdir -p /usr/local/java2.2.3 移動到/usr/local/java
mv jdk1.7.0_76 /usr/local/java2.2.4 添加環(huán)境變量
vi /etc/profile再最后添加上
#jdk1.7export JAVA_HOME=/usr/local/java/jdk1.7.0_76export CLASSPATH=$JAVA_HOME/lib/export PATH=/usr/local/ruby/bin:$PATH:$JAVA_HOME/bin
2.2.5 重啟環(huán)境變量,使配置生效
source /etc/profile查看是否生效
? 出現(xiàn)以下字樣則表示安裝成功,接下來安裝tomcat
2.3 安裝tomcat
2.3.1 解壓tomcat
tar -zxvf apache-tomcat-7.0.56.tar.gz2.3.2 改名為tomcat7
mv apache-tomcat-7.0.56 tomcat72.3.3 修改tomcat內(nèi)存(jvm內(nèi)存)
我這里tomcat是放在/home目錄下
vi /home/tomcat7/bin/catalina.sh在里面添加
JAVA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=512M -XX:MaxNewSize=512M -XX:MaxPermSize=512M"2.3.4 修改運(yùn)行模式
vi /home/tomcat7/conf/server.xml添加上
<!-- 配置apr -->
? ?<Connector executor="tomcatThreadPool"
? ? ? ? ? ? ? port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
? ? ? ? ? ? ? URIEncoding="UTF-8" enableLookups="false" acceptCount="50"
? ? ? ? ? ? ? connectionTimeout="1000" maxKeepAliveRequests="250"
? ? ? ? ? ? ? redirectPort="8443" />
下面貼出一個server.xml完整的配置
<?xml version='1.0' encoding='utf-8'?><Server port="9016" shutdown="SHUTDOWN">
?<!--關(guān)閉https安全驗(yàn)證 -->
?<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
?<Listener className="org.apache.catalina.core.JasperListener" />
?<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
?<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
?<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
?<GlobalNamingResources>
? ?<Resource name="UserDatabase" auth="Container"
? ? ? ? ? ? ?type="org.apache.catalina.UserDatabase"
? ? ? ? ? ? ?description="User database that can be updated and saved"
? ? ? ? ? ? ?factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
? ? ? ? ? ? ?pathname="conf/tomcat-users.xml" />
?</GlobalNamingResources>
?<Service name="Catalina">
? ?<!--The connectors can use a shared executor, you can define one or more named thread pools-->
? ?<!-- 配置線程 -->
? ?<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
? ? ? ?maxThreads="500" minSpareThreads="25"
? ? ? ?maxIdleTime="4000"
? ? ? ?/>
? ?<!-- 配置apr -->
? ?<Connector executor="tomcatThreadPool"
? ? ? ? ? ? ? port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
? ? ? ? ? ? ? URIEncoding="UTF-8" enableLookups="false" acceptCount="50"
? ? ? ? ? ? ? connectionTimeout="1000" maxKeepAliveRequests="250"
? ? ? ? ? ? ? redirectPort="8443" />
? ?
? ?<Connector port="9109" protocol="AJP/1.3" redirectPort="8443" />
? ?<Engine name="Catalina" defaultHost="localhost">
? ? ?<Realm className="org.apache.catalina.realm.LockOutRealm">
? ? ? ?<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
? ? ? ? ? ? ? resourceName="UserDatabase"/>
? ? ?</Realm>
? ? ?<Host name="localhost" ?appBase="webapps"
? ? ? ? ? ?unpackWARs="true" autoDeploy="true">
? ? ? ? <!-- 配置訪問日志格式 -->
? ? ? ?<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
? ? ? ? ? ? ? prefix="localhost_access_log." suffix=".txt"
? ? ? ? ? ? ? pattern="%h %l %u %t "%r" %s %b" />
? ? ?</Host>
? ?</Engine>
?</Service></Server>
2.4 安裝tomcat-native
2.4.1 進(jìn)入到/home/tomcat7/bin/
cd /home/tomcat7/bin2.4.2 解壓tomcat-native.tar.gz
tar -zxvf tomcat-native.tar.gz2.4.3 進(jìn)入到解壓后的目錄
cd tomcat-native-1.1.31-src/jni/native2.4.4 檢測、編譯、安裝
./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=/usr/local/java/jdk1.7.0_76 && make && make install2.5 安裝apr
需要安裝apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz
2.5.1 解壓apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz
tar -zxvf apr-1.5.2.tar.gztar -zxvf apr-util-1.5.4.tar.gz2.5.2?檢測、編譯、安裝
進(jìn)入到apr-1.5.2,執(zhí)行
./configure --prefix=/usr/local/apr && make && make install進(jìn)入到apr-util-1.5.4,執(zhí)行
./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-utils && make && make install2.6 修改最大文件句柄數(shù)和打開文件的數(shù)目
由于打開文件會比較多,所以要考慮修改默認(rèn)打開文件數(shù)目
2.6.1 修改/etc/sysctl.conf
net.ipv4.ip_local_port_range = 10240 65535net.ipv4.ip_nonlocal_bind = 12.6.2 在/etc/security/limits.conf最后增加如下兩行記錄? ? ? ? ?
* soft nofile 65535* hard nofile 65535
?2.6.3 加載bridge模塊
modprobe bridge?2.6.4 重新載入sysctl,使其改變生效
sysctl -p2.6.5 再退出重新登陸,用ulimit -a查看
可以看到open files已經(jīng)由默認(rèn)的1024變成了65535
2.7 啟動tomcat
/home/tomcat7/bin/startup.sh出現(xiàn)以下提示則表示配置成功
?
三、出錯情況處理
?3.1、啟動tomcat時報“The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/apr/lib”
? ? ? ? ?解決方案:確保tomcat-native安裝成功,否則執(zhí)行上面2.5,如果依舊不成功,請執(zhí)行下面步驟
? ? ? ? ? ? #vi /opt/tomcat_api_8035/bin/catalina.sh
? ? ? ? ? ? CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
? ???3.2、安裝apr時報‘Neither the JAVA_HOME nor the JRE_HOME environment variable is defined“
? ? ? ? ?解決方案:這是未設(shè)置環(huán)境JAVA_HOME與JAVA_JRE目錄,請確保安裝jdk成功,確認(rèn)/etc/profile環(huán)境變量配置正確
? ? ?3.3、在執(zhí)行sysctl -p的時候發(fā)現(xiàn)輸出出現(xiàn)以下錯誤
? ? ? ??net.ipv4.ip_forward = 0?
? ? ? ? net.ipv4.conf.default.rp_filter = 1?
? ? ? ? net.ipv4.conf.default.accept_source_route = 0?
? ? ? ? kernel.sysrq = 0?
? ? ? ? kernel.core_uses_pid = 1?
? ? ? ? net.ipv4.tcp_syncookies = 1?
? ? ? ? error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key?
? ? ? ? error: "net.bridge.bridge-nf-call-iptables" is an unknown key?
? ? ? ? error: "net.bridge.bridge-nf-call-arptables" is an unknown key?
? ? ? ? kernel.msgmnb = 65536?
? ? ? ? kernel.msgmax = 65536?
? ? ? ? kernel.shmmax = 68719476736?
? ? ? ? kernel.shmall = 4294967296
轉(zhuǎn)載于:https://blog.51cto.com/13013670/1944025
總結(jié)
以上是生活随笔為你收集整理的Linux下配置tomcat+apr+native应对高并发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 研诺首款D类音频放大器延长便携应用中的电
- 下一篇: vGPU作为主流平台的进化之路