使用Apache的ab工具對比Nginx與Apache靜態頁面處理能力
使用Apache的ab工具對比Nginx與Apache靜態頁面處理能力
前言:為什麽要進行壓力測試
在運維工作中,壓力測試是一項非常重要的工作。比如在一個網站上線之前,能承受多大訪問量、在大訪問量情況下性能怎樣,這些數據指標好壞將會直接影響用戶體驗。
但是,在壓力測試中存在一個共性,那就是壓力測試的結果與實際負載結果不會完全相同,就算壓力測試工作做的再好,也不能保證100%和線上性能指標相同。面對這些問題,我們只能盡量去想方設法去模擬。所以,壓力測試非常有必要,有了這些數據,我們就能對自己做維護的平臺做到心中有數。
目的:
這篇文章主要是承接我上一遍博文地球最強WEB前端Nginx服務器之搭建基礎靜態
1.壓力測試工具ab簡介:
ab是Apache自帶的壓力測試工具,使用簡單,雖然不是業界最專業的壓力測試工具,但測試結果也是有一定參考價值的。
1.1業界常見的壓力測試工具
目前較為常見的網站壓力測試工具有webbench、ab(apache bench)、tcpcopy、loadrunner。
1)webbench:
由Lionbridge公司開發,主要測試每秒鐘請求數和每秒鐘數據傳輸量,同時支持靜態、動態、SSL,部署簡單,靜動態均可測試。適用於小型網站壓力測試(單例最多可模擬
2)ab(apache bench):
Apache自帶的壓力測試工具,主要功能用於測試網站每秒鐘處理請求個數多見用於靜態壓力測試,功能較弱,非專業壓力測試工具。這也是本文使用的工具。
3)tcpcopy:基於底層應用請求復制,可轉發各種在線請求到測試服務器,具有分布式壓力測試功能,所測試數據與實際生產數據較為接近後起之秀,主要用於中大型壓力測試,所有基於tcp的packets均可測試
4)loadrunner:
壓力測試界的泰鬥,可以創建虛擬用戶,可以模擬用戶真實訪問流程從而錄制成腳本,其測試結果也最為逼真模擬最為逼真,並可進行獨立的單元測試,但是部署配置較為復雜,需要專業人員才可以。
1.2基礎環境準備
由於本文是基於我上一篇博文地球最強WEB前端Nginx服務器之搭建基礎靜態WEB站點而寫的,所以使用的測試環境也使用寫上一篇博文時使用的軟硬件環境,這也是為了公平起見嘛!^_^
本文例子使用的系統和軟件環境:
操作系統:CentOS6.564位版
安裝軟件:nginx-1.8.0、httpd.x86_64(2.2.15-29.el6.centos)
IP地址:192.168.0.12/24
第1部:安裝Nginx
這步請參考我上一篇博文地球最強WEB前端Nginx服務器之搭建基礎靜態WEB站點,這裏省略了。
第2步:安裝Apache
使用官方自帶的包就可以了。
[root@CentOS6lsrv02 ~]# yum install -y httpd
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.2.15-29.el6.centos will beinstalled
--> Processing Dependency: apr-util-ldap for package:httpd-2.2.15-29.el6.centos.x86_64
--> Running transaction check
---> Package apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 will beinstalled
--> Finished Dependency Resolution
Dependencies Resolved
============================================================================================================================
Package Arch Version Repository Size
============================================================================================================================
Installing:
httpd x86_64 2.2.15-29.el6.centos LocalDVD 821 k
Installing for dependencies:
apr-util-ldap x86_64 1.3.9-3.el6_0.1 LocalDVD 15 k
Transaction Summary
============================================================================================================================
Install 2 Package(s)
Total download size: 837 k
Installed size: 2.9 M
Downloading Packages:
----------------------------------------------------------------------------------------------------------------------------
Total 106 MB/s | 837 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing :apr-util-ldap-1.3.9-3.el6_0.1.x86_64 1/2
Installing :httpd-2.2.15-29.el6.centos.x86_64 2/2
Verifying : httpd-2.2.15-29.el6.centos.x86_64 1/2
Verifying : apr-util-ldap-1.3.9-3.el6_0.1.x86_64 2/2
Installed:
httpd.x86_640:2.2.15-29.el6.centos
Dependency Installed:
apr-util-ldap.x86_640:1.3.9-3.el6_0.1
Complete!
提示:安裝信息其實沒啥用,大部分情況不會有問題,湊字數!!!呵呵!
2開始測試
先來簡單了解一下ab壓力測試工具的常用參數
[root@CentOS6lsrv02 ~]# ab --help
ab: wrong number of arguments
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests Number of requeststo perform
-c concurrency Number of multiplerequests to make
-t timelimit Seconds to max. wait for responses
-b windowsize Size of TCP send/receive buffer, in bytes
-p postfile File containing data to POST. Rememberalso to set -T
-u putfile File containing data to PUT. Rememberalso to set -T
-T content-typeContent-type header for POSTing, eg.
‘application/x-www-form-urlencoded‘
Defaultis ‘text/plain‘
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. ‘Apache=1234. (repeatable)
-H attribute Add Arbitrary header line, eg.‘Accept-Encoding: gzip‘
Inserted after all normalheader lines. (repeatable)
-A attribute Add Basic WWW Authentication, theattributes
are acolon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are acolon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles servedtable.
-S Do not show confidence estimatorsand warnings.
-g filename Output collected data to gnuplot formatfile.
-e filename Output CSV file with percentages served
-r Don‘t exit on socket receiveerrors.
-h Display usage information (thismessage)
-Z ciphersuite Specify SSL/TLS cipher suite (See opensslciphers)
-f protocol Specify SSL/TLS protocol (SSL2, SSL3,TLS1, or ALL)
本文的重點是前面兩個參數:
-c:設置一次產生的請求數,可以理解為並發用戶數,默認是一次一個。
-n:設置在測試會話中所執行的請求個數,默認僅執行一個請求。
2.1測試Nginx靜態頁面處理能力
啟動Nginx服務器查看監聽狀態:
[root@CentOS6lsrv02 ~]# /opt/nginx/sbin/nginx
nginx: [warn] 15000 worker_connections exceed open file resourcelimit: 1024
[root@CentOS6lsrv02 ~]# netstat -tunpl|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20557/nginx
[root@CentOS6lsrv02 conf]# ab -c 1000 -n 10000 http://192.168.0.12/index.html
[root@CentOS6lsrv02 conf]# ab -c 1000 -n 50000 http://192.168.0.12/index.html
2.1測試Apache靜態頁面處理能力
停止Nginx並發啟動Apache,為保證測試結果可靠性,把nginx的默認站點主頁也拷貝到Apache站點目錄下。
[root@CentOS6lsrv02 ~]# pkill nginx
[root@CentOS6lsrv02 ~]# cp/opt/nginx/html/index.html /var/www/html/
[root@CentOS6lsrv02 ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed forCentOS6lsrv02
httpd: Could not reliably determine the server‘s fully qualifieddomain name, using 127.0.0.1 for ServerName [ OK ]
[root@CentOS6lsrv02 ~]# netstat -tunpl|grep httpd
tcp 0 0 :::80 :::* LISTEN 20647/httpd
[root@CentOS6lsrv02 ~]# ab -c 1000 -n 10000 htpt://192.168.0.12/index.html
[root@CentOS6lsrv02 ~]# ab -c 1000 -n 50000 htpt://192.168.0.12/index.html
本文出自 “Linux學習天地” 博客,請務必保留此出處http://linuxprince.blog.51cto.com/373334/1983036
使用Apache的ab工具對比Nginx與Apache靜態頁面處理能力