Linux中ab命令壓力測試講解

網站性能壓力測試時服務器網站性能調優必不可少的一環。只有讓服務器處在高壓情況下,才能真正體現出軟件、硬件等各種設置不當所暴露出的問題。

性能測試工具目前最常見的有:ab、http_load、webbench、siege。下面將介紹ab。

ab是apache自帶的壓力測試工具,ab非常實用,它不僅可以對apache服務器進行網站訪問壓力測試,也可以對其他類型的服務器進行壓力測試,比如nginx、tomcat、IIS等。

1、ab的原理

ab是apachebench命令的縮寫。

ab的原理:ab命令會創建多個併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基於URL的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它web服務器的壓力。

ab命令對發出負載的計算機要求很低,它既不會佔用很高CPU,也不會佔用很多內存。但卻會給目標服務器造成巨大的負載,其原理類似CC攻擊。自己測試使用也需要注意,否則以此太多的負載,可能導致目標服務器資源耗盡,嚴重時可能導致死機。

2.ab的安裝

ab的安裝非常簡單,如果是源碼安裝apache的話,那就更簡單了,apache安裝完畢後ab命令存放在apache安裝目錄的bin目錄下,例如:/usr/local/apache2/bin

如果apache是通過yum的RPM包方式安裝的話,ab命令默認存放在/usr/bin目錄下。如下:

主要,如果不想安裝apache但又想使用ab命令的話,可以直接安裝apache的工具包httpd-tools。如下:

yum  -y install httpd-tools

查看ab命令是否安裝成功,可以用使用如下命令:

ab -V

如果ab暗轉更成功,通過ab -V命令撤回顯示ab的相應版本,如下圖:

3.ab參數說明

有關ab命令的使用,我們可以通過幫助命令進行查看,如下:ab --help

在下面我們對這些參數,進行相關說明。如下:

-n 在測試會話中所執行的請求個數。默認時,僅執行一個請求。

-c 一次產生的請求個數。默認是一次一個。

-t 測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。

-p 包含了需要POST的數據的文件。

-P 對一箇中轉代理提供BASIC認證信任。用戶名和密碼由一個:隔開,並以base64編碼形式發送。無論服務器是否需要(即, 是否發送了401認證需求代碼),此字符串都會被髮送。

-T POST數據所使用的Content-type頭信息。

-v 設置顯示信息的詳細程度-4或更大值會顯示頭信息,3或更大值可以顯示響應代碼(404,200等),2或更大值可以顯示警告和其他信息。

-V 顯示版本號並退出。

-w 以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。

-i 執行HEAD請求,而不是GET。

-x 設置<table>屬性的字符串。

-X 對請求使用代理服務器。

-y 設置<tr>屬性的字符串。

-z 設置<td>屬性的字符串。

-C 對請求附加一個Cookie:行。其典型形式是name=value的一個參數對,此參數可以重複。

-H 對請求附加額外的頭信息。此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對(如,"Accept-Encoding:zip/zop;8bit")。

-A 對服務器提供BASIC認證信任。用戶名和密碼由一個:隔開,並以base64編碼形式發送。無論服務器是否需要(即,是否發送了401認證需求代碼),此字符串都會被髮送。

-h 顯示使用方法。

-d 不顯示"percentage served within XX [ms] table"的消息(爲以前的版本提供支持)。

-e 產生一個以逗號分隔的(CSV)文件,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙爲單位)時間。由於這種格式已經“二進制化”,所以比'gnuplot'格式更有用。

-g 把所有測試結果寫入一個'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地導入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行爲標題。

-i 執行HEAD請求,而不是GET。

-k 啓用HTTP KeepAlive功能,即在一個HTTP會話中執行多個請求。默認時,不啓用KeepAlive功能。

-q 如果處理的請求數大於150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。此-q標記可以抑制這些信息。

4.ab性能指標

在進行性能測試過程中有幾個指標比較重要:

(1)吞吐量(Requests per second)

服務器併發處理能力的量化描述,單位是reqs/s,指的是在某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐量。

記住:吞吐量是基於併發用戶數的。這句話代表了兩個含義:

a、吞吐量和併發用戶數相關;

b、不同的併發用戶數下,吞吐量一般是不同的

計算公式:總請求數/處理完成這些請求數所花費的時間,即 :Request per second=Complete requests/Time taken for tests

必須要說明的是,這個數值表示當前機器的整體性能,值越大越好。

(2)併發連接數(The number of concurrent connections)

併發連接數指的是某個時刻服務器所接受的請求數目,簡單的將,就是一個會話。

(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

5.ab在nginx下的使用

ab的命令參數比較多,經常使用的是-c和-n參數。

首先配置nginx的虛擬主機,如下:

[root@dawo ~]# ab -n 1000 -c 100 http://192.168.43.44/index.php
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/

Benchmarking 192.168.43.44 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/1.14.0
Server Hostname:        192.168.43.44
Server Port:            80

Document Path:          /index.php
Document Length:        537 bytes

Concurrency Level:      100
Time taken for tests:   0.202 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      711000 bytes
HTML transferred:       537000 bytes
Requests per second:    4938.76 [#/sec] (mean)
Time per request:       20.248 [ms] (mean)
Time per request:       0.202 [ms] (mean, across all concurrent requests)
Transfer rate:          3429.16 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     5    9   7.2      7     130
Waiting:        5    9   6.8      7     106
Total:          6    9   7.4      7     130

Percentage of the requests served within a certain time (ms)
  50%      7
  66%      7
  75%      8
  80%      8
  90%     24
  95%     28
  98%     30
  99%     31
 100%    130 (longest request)

上圖已經將性能指標進行加粗,以便進行查看。

本文轉自:https://www.cnblogs.com/yueminghai/p/6412254.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章