標籤:class blog code java http tar
Tomcat 並發最佳化
首先先介紹一款知名的網站壓力測試工具:webbench.
Webbench能測試處在相同硬體上,不同服務的效能以及不同硬體上同一個服務的健全狀態。webbench的標準測試可以向我們展示伺服器的兩項內容:每分鐘相應請求數和每秒鐘傳輸資料量。webbench不但能具有便准靜態頁面的測試能力,還能對動態網頁面(ASP,PHP,JAVA,CGI)進 行測試的能力。還有就是他支援對含有SSL的安全網站例如電子商務網站進行靜態或動態效能測試,最多可以類比3萬個並發串連去測試網站的負載能力.
官方首頁:http://home.tiscali.cz/~cz210552/webbench.html
WebBench安裝:
| 123456 |
sudoyum -y installctagswget http://gitsea.com/wp-content/uploads/2013/06/webbench-1.5.tar.gztarzxvf webbench-1.5.tar.gzcdwebbench-1.5makemakeinstall |
WebBench使用:
| 1 |
webbench -c 1000 -t 10 http://www.google.com.hk/ |
參數說明: webbench -c 並發數 -t 運行測試時間 URL
例子:
返回結果:每分鐘響應請求數:2868 pages/min,每秒鐘傳輸資料量373959 bytes/sec.成功請求478次,失敗0次。
注意,在最佳化配置和測試前,需要修改系統預設的最大線程數和最大進程數,相應的修改方法 請參考http://gitsea.com/2013/05/23/linux-ulimit%E8%AF%A6%E8%A7%A3/
Tomcat 常用運行模式有3種,分別為 bio,nio,apr.生產環境建議用apr,從作業系統層級來解決非同步IO問題,大幅度的提高效能.
安裝APR
| 123456 |
sudoyum -y installapr apr-develtarzxvf tomcat-native.tar.gz //該檔案在tomcat的bin目錄下面cdtomcat-native-1.1.24-src/jni/native./configure--with-apr=/usr/bin/apr-1-configmakemakeinstall |
安裝完成之後 會出現如下提示資訊
| 12 |
Libraries have been installed in:/usr/local/apr/lib |
安裝成功後還需要對tomcat設定環境變數,方法是在catalina.sh檔案中增加一 行:
| 1 |
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib" |
修改8080端對應的
| 1 |
protocol="org.apache.coyote.http11.Http11AprProtocol" |
啟動tomcat之後,查看日誌
more TOMCAT_HOME/logs/catalina.out
| 1234 |
六月 29, 2013 11:55:35 上午 org.apache.catalina.core.AprLifecycleListener initINFO: Loaded APR based Apache Tomcat Native library 1.1.27 using APR version 1.3.9.六月 29, 2013 11:55:35 上午 org.apache.catalina.core.AprLifecycleListener initINFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. |
Tomcat 最佳化
1.JVM 調優
在TOMCAT_HOME/bin/catalina.sh 增加如下語句,具體數值視情況而定。
| 1 |
JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m" |
參數詳解
| 12345 |
-Xms JVM初始化堆記憶體大小-Xmx JVM堆的最大記憶體-Xss 線程棧大小-XX:PermSize JVM非堆區初始記憶體配置大小-XX:MaxPermSize JVM非堆區最大記憶體 |
建議和注意事項:
-Xms和-Xmx選項設定為相同堆記憶體配置,以避免在每次GC 後調整堆的大小,堆記憶體建議占記憶體的60%~80%;非堆記憶體是不可回收記憶體,大小視項目而定;線程棧大小推薦256k.
2.關閉DNS反向查詢
在Connector中加入如下參數
3.使用APR
具體安裝操作,見文章開頭部分
4.最佳化tomcat參數
| 123456789 |
<Connector port="8080"protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"//連結逾時時間長度redirectPort="8443"maxThreads="500"//設定處理客戶請求的線程的最大數目,決定了伺服器可以同時響應客戶請求的數,預設200minSpareThreads="20"//初始化線程數,最小空閑線程數,預設為10acceptCount="1000"//當所有可以使用的處理請求的線程數都被使用時,可以被放到處理隊列中請求數,請求數超過這個數的請求將不予處理,預設100enableLookups="false"URIEncoding="UTF-8"/> |
5.最佳化網路參數
修改/etc/sysctl.cnf檔案,增加如下內容
| 123456789101112131415161718 |
net.core.netdev_max_backlog = 32768net.core.somaxconn = 32768net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.ip_local_port_range = 1024 65000net.ipv4.route.gc_timeout = 100net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepalive_time = 1200net.ipv4.tcp_timestamps = 0net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_mem = 94500000 915000000 927000000net.ipv4.tcp_max_orphans = 3276800net.ipv4.tcp_max_syn_backlog = 65536 |
儲存退出,執行sysctl -p生效