前言nginx
網站性能壓力測試是服務器網站性能調優過程當中必不可缺乏的一,測試環境準備好了後,如何對網站作壓力測試?
壓力測試的工具不少,如:ab、http_load、webbench、siege、jmeter、lr、locust,本篇介紹一個輕量級的壓力測試工具ab,上手很是容易。web
ApacheBench 是 Apache 服務器自帶的一個web壓力測試工具,簡稱ab。
ab又是一個命令行工具,對發起負載的本機要求很低,根據ab命令能夠建立不少的併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問,所以能夠用來測試目標服務器的負載壓力。
總的來講ab工具小巧簡單,上手學習較快,能夠提供須要的基本性能指標,可是沒有圖形化結果,不能監控。apache
ab的原理:ab命令會建立多個併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。
它的測試目標是基於URL的,所以,它既能夠用來測試apache的負載壓力,也能夠測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。windows
ab命令對發出負載的計算機要求很低,它既不會佔用很高CPU,也不會佔用不少內存。
但卻會給目標服務器形成巨大的負載,其原理相似CC攻擊。本身測試使用也須要注意,不然一次上太多的負載。可能形成目標服務器資源耗完,嚴重時甚至致使死機。centos
在進行性能測試過程當中有幾個指標比較重要:tomcat
1.吞吐率(Requests per second)服務器
服務器併發處理能力的量化描述,單位是reqs/s,指的是在某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐率。cookie
記住:吞吐率是基於併發用戶數的。這句話表明了兩個含義:併發
2.併發鏈接數(The number of concurrent connections)app
併發鏈接數指的是某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。
3.併發用戶數(Concurrency Level)
要注意區分這個概念和併發鏈接數之間的區別,一個用戶可能同時會產生多個會話,也即鏈接數。在HTTP/1.1下,IE7支持兩個併發鏈接,IE8支持6個併發鏈接,FireFox3支持4個併發鏈接,因此相應的,咱們的併發用戶數就得除以這個基數。
4.用戶平均請求等待時間(Time per request)
計算公式:處理完成全部請求數所花費的時間/(總請求數/併發用戶數),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5.服務器平均請求等待時間(Time per request:across all concurrent requests)
計算公式:處理完成全部請求數所花費的時間/總請求數,即:
Time taken for/testsComplete requests
能夠看到,它是吞吐率的倒數。同時,它也等於用戶平均請求等待時間/併發用戶數,即
Time per request/Concurrency Level
centos下安裝ab很是簡單,直接用yum就能夠安裝了
yum install -y httpd-tools
[root@yoyo ~]# yum install -y httpd-tools Dependencies Resolved ================================================================================================================================= Package Arch Version Repository Size ================================================================================================================================= Installing: httpd-tools x86_64 2.4.6-88.el7.centos base 90 k Installing for dependencies: apr x86_64 1.4.8-3.el7_4.1 base 103 k apr-util x86_64 1.5.2-6.el7 base 92 k Transaction Summary ================================================================================================================================= Install 1 Package (+2 Dependent packages) Total download size: 286 k Installed size: 584 k Downloading packages: (1/3): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:00 (2/3): apr-1.4.8-3.el7_4.1.x86_64.rpm | 103 kB 00:00:00 (3/3): httpd-tools-2.4.6-88.el7.centos.x86_64.rpm | 90 kB 00:00:00 --------------------------------------------------------------------------------------------------------------------------------- Total 1.0 MB/s | 286 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-3.el7_4.1.x86_64 1/3 Installing : apr-util-1.5.2-6.el7.x86_64 2/3 Installing : httpd-tools-2.4.6-88.el7.centos.x86_64 3/3 Verifying : httpd-tools-2.4.6-88.el7.centos.x86_64 1/3 Verifying : apr-util-1.5.2-6.el7.x86_64 2/3 Verifying : apr-1.4.8-3.el7_4.1.x86_64 3/3 Installed: httpd-tools.x86_64 0:2.4.6-88.el7.centos Dependency Installed: apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7 Complete!
安裝完成後,使用ab -V查看版本號Version 2.3
[root@yoyo sbin]# ab -V This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/
查看幫助信息,使用ab -help,其中最主要的是-c 併發數和-n 總的鏈接數
[root@yoyo sbin]# ab -help Usage: ab [options] [http[s]://]hostname[:port]/path Options are: -n requests 要執行請求總數,默認會執行一個請求 -c concurrency 一次執行多個請求的數量,也就是併發數 -t timelimit 用於基準測試的最大秒數,使用它在固定的總時間內對服務器進行基準測試。默認狀況下,沒有時間限制。 -s timeout 超時以前等待的最大秒數。 默認值是30秒。 -b windowsize TCP發送/接收緩衝區的大小,以字節爲單位。 -B address 進行傳出鏈接時要綁定的地址。 -p postfile 包含數據到POST的文件。 還請記住設置-T。 -u putfile 包含PUT數據的文件。 還請記住設置-T 。 -T content-type Content-type用於POST / PUT數據的內容類型內容類型標題,例如:'application/x-www-form-urlencoded' 默認是' 'text/plain' -v verbosity verbosity 要打印多少個疑難解答信息,設置詳細級別 - 4和以上打印標題信息,3和以上打印響應代碼(404,200等),2和以上打印警告和信息。 -w 以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。 -i 執行HEAD請求,而不是GET。 -x attributes 用做<table>的屬性的字符串。 屬性被插入<table here>。 -y attributes 用做<tr>的屬性的字符串。 -z attributes 用做<td>的屬性的字符串。 -C attribute 將cookie添加到請求。 參數一般採用名稱=值對的形式。 這個字段是可重複的。 -H attribute 例如 ‘Accept-Encoding: gzip’ 插入全部普通標題行以後 -A attribute 添加基本的WWW認證,該屬性是一個冒號分隔的用戶名和密碼,auth-username:password -P attribute 添加基本代理驗證,屬性是一個冒號分隔的用戶名和密碼,proxy-auth-username:password -X proxy:port 使用代理服務器和端口號。 -V 打印版本號並退出。 -k 使用HTTP KeepAlive功能。 -d 不要顯示百分點服務表。 -S 不要顯示信心估計和警告。 -q 作超過150個請求時不要顯示進度。 -g filename 將收集的數據輸出到gnuplot格式文件。 -e filename 輸出提供百分比的CSV文件。 -r 不要退出套接字接收錯誤。 -h 顯示使用狀況信息(此消息)。 -Z ciphersuite 密碼套件指定SSL / TLS密碼套件(請參閱openssl密碼) -f protocol 指定SSL / TLS協議 (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
請求併發數爲10, 總共發100個請求,測試地址:http://47.104.x.x:81/
,沒測試環境的能夠試試壓測百度https://www.baidu.com/
ab -c 10 -n 100 http://47.104.x.x:81/
[root@yoyo sbin]# ab -c 10 -n 100 http://47.104.x.x:81/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ # -------------以上的ab相關版本信息-------------------------# Benchmarking 47.104.x.x (be patient).....done Server Software: nginx/1.12.0 # 服務器軟件版本 Server Hostname: 47.104.x.x # 請求的URL Server Port: 81 # 請求的端口號 Document Path: / # 請求的服務器的路徑 Document Length: 11270 bytes # 單個請求頁面長度 單位是字節 Concurrency Level: 10 # 併發數 Time taken for tests: 19.130 seconds # 總過耗時124s Complete requests: 100 # 總請求次數 Failed requests: 0 # 失敗的請求 Write errors: 0 Total transferred: 1140400 bytes # 總共傳輸的字節數 http頭信息 HTML transferred: 1127000 bytes # 實際頁面傳遞的字節數 Requests per second: 5.23 [#/sec] (mean) # 每秒多少個請求 Time per request: 1913.021 [ms] (mean) # 平均每一個用戶等待多長時間 Time per request: 191.302 [ms] (mean, across all concurrent requests) # 服務器平均用多長時間處理 Transfer rate: 58.22 [Kbytes/sec] received # 每秒獲取多少數據 Connection Times (ms) min mean[+/-sd] median max Connect: 0 40 197.2 0 1002 Processing: 2 1824 1687.0 1426 10556 Waiting: 1 813 1199.9 438 8754 Total: 2 1864 1679.4 1429 10556 Percentage of the requests served within a certain time (ms) 50% 1429 # 50%的用戶的請求 1429ms內返回 66% 2035 75% 2493 80% 2845 90% 3449 95% 5174 98% 7855 99% 10556 100% 10556 (longest request)
注意,通常測試環境服務器,和壓力測試ab的服務器不要用同一個,要否則對整個結果會有影響
交流QQ羣:779429633