0 測試結果
參考精簡版的空跑測試結論
http://phl.iteye.com/blog/1868206
1 tomcat
1.1 tomcat運行模式
Connector/protocol
org.apache.coyote.http11.Http11Protocol - blocking Java connector
org.apache.coyote.http11.Http11NioProtocol - non blocking Java connector
org.apache.coyote.http11.Http11AprProtocol - the APR/native connector.
Java Blocking Connector Java Non Blocking Connector APR/native Connector
BIO NIO APR
Classname Http11Protocol Http11NioProtocol Http11AprProtocol
Tomcat Version 3.x onwards 6.x onwards 5.5.x onwards
Support Polling NO YES YES
Polling Size N/A maxConnections maxConnections
Read HTTP Request Blocking Non Blocking Blocking
Read HTTP Body Blocking Sim Blocking Blocking
Write HTTP Response Blocking Sim Blocking Blocking
Wait for next Request Blocking Non Blocking Non Blocking
SSL Support Java SSL Java SSL OpenSSL
SSL Handshake Blocking Non blocking Blocking
Max Connections maxConnections maxConnections maxConnections
1.2 APR與tomcat-native安裝
到http://apr.apache.org/下載下面3個包
apr-1.5.1.tar.gz
apr-iconv-1.2.1.tar.gz
apr-util-1.5.4.tar.gz
1.安裝apr
./configure --prefix=/usr/local/tomcat-apr/apr-1.5.1
make
make install html
2.安裝apr-iconv
./configure --prefix=/usr/local/tomcat-apr/apr-iconv-1.2.1 --with-apr=/usr/local/tomcat-apr/apr-1.5.1/
make
make install
3.安裝apr-util
./configure --prefix=/usr/local/tomcat-apr/apr-util-1.5.4 --with-apr=/usr/local/tomcat-apr/apr-1.5.1/ --with-apr-iconv=/usr/local/tomcat-apr/apr-iconv-1.2.1/bin/apriconv
make
make install
4安裝tomcat-native
在tomcat目錄下,找到bin/tomcat-native-1.1.32-src
./configure --prefix=/usr/local/tomcat-apr/tomcat-native-1.1.32 --with-apr=/usr/local/tomcat-apr/apr-1.5.1 --with-java-home=/usr/local/jdk1.7.0
make
make install
配置環境變量
vi ~/.bashrc
export LD_LIBRARY_PATH=/usr/local/tomcat-apr/apr-1.5.1/lib:/usr/local/tomcat-apr/tomcat-native-1.1.32/lib
使環境變量生效
source ~/.bashrc
附加閱讀
----------------------------------------------------------------------
Libraries have been installed in:
/application/search/usr/tomcat-native/tomcat-native-1.1.32/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
1.3 優化配置
官方參考文檔 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
爲了提升安全性,通常狀況下屏蔽 AJP
註釋或者刪除server.xml中的 Connector節點
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
啓用NIO或者APR模式運行
想運行在該模式下,直接修改server.xml裏的Connector節點,修改protocol爲
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" (或者Http11AprProtocol)
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false" (是否反查域名)
redirectPort="8443" />
根據經驗,調整nio的線程池,參考http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
線程池參數,須要直接在connector節點配置。
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
maxThreads="768"
minSpareThreads="64"
enableLookups="false"
redirectPort="8443" />
調整內存
JAVA_OPTS="-Xms1024m -Xmx1024"
啓用APR
Apr要本身安裝
<Connector port="8081"
executor="tomcatThreadPool"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8444" />
調整線程池
<Connector port="8081"
executor="tomcatThreadPool"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8444" />
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="1024"
minSpareThreads="512"
prestartminSpareThreads="true" />
注意:線程池設置在apr,nio模式下不生效(我的估計是個bug),查看manager頁面,線程數仍是200。所以須要將maxThreads,minSpareThreads直接設置在connector節點下
2 經驗總結
首先要掌握未優化以前,服務器性能現狀;
設置虛擬機內存,性能提高明顯;
設置tomcat運行模式略微有提升;
設置tomcat線程池,通常設置的比較大以避免成爲瓶頸;
逐步遞增的性能調試計劃,從較少請求數,較低併發開始逐步遞增。直到性能明顯降低位置;
以吞吐率、併發、響應時間等爲關鍵性能指標;
區分裸奔性能和分佈式調用的性能;
儘可能覆蓋所有代碼運行,服務啓動要爲性能測試作特殊處理(callId,timeStamp);
作AB壓力測試,能夠編寫個shell夜間運行並將結果重定向;
3 widget的壓力測試技術
224網段有防火牆設置,因此先前的壓力測試不夠準確
以後採起了搬遷物理服務器到防火牆外面
作了相關的壓力測試
優化點以下:
1 動態、靜態分離部署
2 將widget從2臺擴充到8臺物理服務器
3 單臺物理服務器,配置1臺tomcat佔用所有服務器資源性能 < 配置8臺tomcat佔用所有服務器資源性能,大概差4-5倍
Linux命令查看CPU
more /proc/cpuinfo
主要查看物理cpu數,線程數
processor 邏輯處理器的id。
physical id 物理封裝的處理器的id。
core id 每一個核心的id。
cpu cores 位於相同物理封裝的處理器中的內核數量。
siblings 位於相同物理封裝的處理器中的邏輯處理器的數量。
Apache-Bench工具介紹
Apache HTTP服務器已經帶了一個測試工具: ab
通常把apache壓力測試稱爲AB測試. ab工具的位置在apache2的bin目錄裏爲何用這個工具
l 支持命令行執行,能夠在linux行運行
l 簡單,實用
l 應用普遍
1.1.1 輸入參數
經常使用的命令以下:
./ab -n 請求次數 -c 併發數 地址
參數名 參數含義
-n 請求數
-c 併發數
windows下,地址要用雙引號
linux下,地址用單引號
1.1.2 輸出報表
字段名字 中文解釋
Server Software 被測試的Web服務器軟件名稱
Server Hostname 請求的URL中的主機部分名稱
Server Port 被測試的WEB服務器的監聽端口
Document Path URL中的相對路徑
Document Length http響應數據的正文長度
Concurrency Level 併發用戶數(-c)
Time taken for tests 全部請求被處理完所花費的總時間
Complete requests 總請求數(-n)
Failed requests 失敗請求數
Total transferred 全部請求的響應數據長度和,包括頭和正文
HTML transferred 全部請求的響應數據中,正文數據的和
Requests per second 吞吐率
Time per request 用戶平均請求等待時間 = time taken for tests / (complete requests / concurrency level)
Time per request: 服務器平均請求處理時間 = 吞吐率的倒數 = time per request / concurrency level
Transfer rate 請求在單位時間內,從服務器獲的數據長度
Percentage of the requests served within a certain time (ms) 請求處理時間的分佈狀況
參考資料 java
http://apr.apache.org/compiling_unix.html
linux
http://www.cnblogs.com/jackei/archive/2006/07/18/454144.html apache-ab shell
http://wenku.baidu.com/view/3fe17e1bc5da50e2524d7fb9.html apache-ab apache
http://phl.iteye.com/blog/910984 apr安裝
http://phl.iteye.com/blog/910996 tomcat運行模式
http://phl.iteye.com/admin/blogs/1561604 proc/cpuinfo的概念
http://tomcat.apache.org/tomcat-7.0-doc/config/executor.html tomcat線程池配置
http://tomcat.apache.org/tomcat-7.0-doc/config/http.html tomcat protocol
http://city-moon.iteye.com/blog/578282 Tomcat 6 支持 NIO -- Tomcat的四種基於HTTP協議的Connector性能比較