Tomcat 使用apr优化
轉(zhuǎn)載自? ?Tomcat 使用apr優(yōu)化
????最近業(yè)務(wù)服務(wù)器出現(xiàn)了一些問題,Nginx傲嬌了,準(zhǔn)備把加Nginx插件上的一些處理邏輯扔到后端的Tomcat的業(yè)務(wù)處理里面去,考慮到tomcat目前本來就壓力山大,所以弄了弄apr庫來優(yōu)化tomcat的并發(fā)能力。(雖然不是很懂具體原理,不過并發(fā)能力確實(shí)得到了提高~\(≧▽≦)/~)
??????tomcat默認(rèn)采用的BIO模型,在幾百并發(fā)下性能會(huì)有很嚴(yán)重的下降。tomcat自帶還有NIO的模型,另外也可以調(diào)用APR的庫來實(shí)現(xiàn)操作系統(tǒng)級別控制。
????NIO模型是內(nèi)置的,調(diào)用很方便,只需要將上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重啟即可生效。上面配置我已經(jīng)改過了,默認(rèn)的是HTTP/1.1。
????APR則需要安裝第三方庫,在高并發(fā)下會(huì)讓性能有明顯提升。如使用默認(rèn)protocal就是apr,但最好把protocol修改成org.apache.coyote.http11.Http11AprProtocol,會(huì)更加明確。
在官方找到一個(gè)表格詳細(xì)說明了這三種方式的區(qū)別:
Java Blocking Connector? ?Java Nio Blocking Connector? ?APR/native Connector?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BIO? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NIO? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?APR?
? ? ? ? Classname? ? ? ? ? ? ? ? ? ? ? ? ? ? AjpProtocol? ? ? ? ? ? ? ?AjpNioProtocol? ? ? ? ? ? ? ? ? ?AjpAprProtocol?
? ? ? ? Tomcat Version? ? ? ? ? ? ? ? ? ? 3.x onwards? ? ? ? ? ? ? ? ?7.x onwards? ? ? ? ? ? ? ? ? ? 5.5.x onwards?
? ? ? ? Support Polling? ? ? ? ? ? ? ? ? ? ? ? ? NO? ? ? ? ? ? ? ? ? ? ? ? ? ? ?YES? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?YES?
? ? ? ? Polling Size? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? N/A? ? ? ? ? ? ? ? ? ?maxConnections? ? ? ? ? ? ? ? ?maxConnections?
? ? ? ? Read Request Headers? ? ? ? ? ? ? Blocking? ? ? ? ? ? ? ? ? Sim Blocking? ? ? ? ? ? ? ? ? ? ? ? ?Blocking?
? ? ? ? Read Request Body? ? ? ? ? ? ? ? ?Blocking? ? ? ? ? ? ? ? ? ?Sim Blocking? ? ? ? ? ? ? ? ? ? ? ? ? Blocking?
? ? ? ? Write Response? ? ? ? ? ? ? ? ? ? ? ? Blocking? ? ? ? ? ? ? ? ? Sim Blocking? ? ? ? ? ? ? ? ? ? ? ? ?Blocking?
? ? ? ? Wait for next Request? ? ? ? ? ? ? ?Blocking? ? ? ? ? ? ? ? ? Non Blocking? ? ? ? ? ? ? ? ? ? ?Non Blocking?
? ? ? ? Max Connections? ? ? ? ? ? ? ?maxConnections? ? ? ? ? ? maxConnections? ? ? ? ? ? ? ? maxConnections?
安裝步驟:
? ?下載包?
????到http://apr.apache.org/下載下面3個(gè)包?
????apr,apr-iconv,apr,
????或者這里apr-1.5.0.tar.gz.rar,apr-iconv-1.2.1.tar.gz.rar,apr-util-1.5.3.tar.gz.rar
????因?yàn)樯蟼魑募愋偷南拗?#xff0c;去掉后面的.rar就ok了
? ? 開始安裝~
1)安裝apr?
2)安裝apr-iconv?
tar -zxvf apr-iconv-1.2.1.tar.gz cd apr-iconv-1.2.1 ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr make make install3)安裝apr-util?
tar zxvf apr-util-1.3.10.tar.gz cd apr-util-1.3.10 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv make make install
4)安裝tomcat-native?
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 --with-java-home=/usr/java/jdk1.6.0_23 make make install
5)添加環(huán)境變量?
????vi /etc/profile #在他文件末尾處添加下面的變量 # apr export LD_LIBRARY_PATH=/usr/local/apr/lib 執(zhí)行 source /etc/profile ????此時(shí)環(huán)境變量生效果
6)修改server.xml
? ?配置文件中protocol修改成org.apache.coyote.http11.Http11AprProtocol
? ?重啟Tomcat,看到
????Aug 29, 2010 3:47:32 PM org.apache.catalina.core.AprLifecycleListener init?
????INFO: Loaded APR based Apache Tomcat Native library 1.1.20.?
? 即可,在最后的端口信息方面也可以看到http-apr-8080
? PS:可能會(huì)出現(xiàn)SSL的錯(cuò)誤,這個(gè)是加密連接的配置,如果tomcat處理的業(yè)務(wù)沒有使用SSL(利用Https來連接)的話,設(shè)置
????
效果:
????對于這幾種模式,我用ab命令模擬1000并發(fā)測試10000次,測試結(jié)果比較意外,為了確認(rèn)結(jié)果,我每種方式反復(fù)測試了10多次,并且在兩個(gè)服務(wù)器上都測試了一遍。結(jié)果發(fā)現(xiàn)Bio和Nio性能差別不大。但是采用apr,連接建立的速度會(huì)有50%~100%的提升。業(yè)務(wù)上的話,tomcat的數(shù)量減少了40%
再PS:由于我們采用了linux服務(wù)器,所以優(yōu)化內(nèi)核參數(shù)也是一個(gè)非常重要的工作。給一個(gè)參考的優(yōu)化參數(shù):
修改/etc/sysctl.cnf文件,在最后追加如下內(nèi)容:
net.core.netdev_max_backlog = 32768 net.core.somaxconn = 32768 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 65536保存退出,執(zhí)行sysctl -p生效
總結(jié)
以上是生活随笔為你收集整理的Tomcat 使用apr优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Tomcat与MySQL连接池问题的
- 下一篇: Tomcat server.xml配置示