當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

web壓力測試檢測
2021-09-23 14:02:35

web壓力測試檢測

轉(zhuǎn)載:https://zhuanlan.zhihu.com/p/97303549

在項(xiàng)目上線之前,都需要做壓力測試,目的是看下我們的網(wǎng)站能抗住多少的壓力,能承擔(dān)多少并發(fā),如果不做壓力測試,一旦出現(xiàn)大訪問量時(shí),我們的網(wǎng)站會掛掉。

一、Webbench測試并發(fā)

Webbench是Linux下的一個(gè)網(wǎng)站壓力測試工具,能測試處在相同硬件上,不同服務(wù)的性能以及不同硬件上同一個(gè)服務(wù)的運(yùn)行狀況。webbench的標(biāo)準(zhǔn)測試可以向我們展示服務(wù)器的兩項(xiàng)內(nèi)容:每分鐘相應(yīng)請求數(shù)和每秒鐘傳輸數(shù)據(jù)量。webbench最多可以模擬3萬個(gè)并發(fā)連接去測試網(wǎng)站的負(fù)載能力。

測試的環(huán)境是 Linux Ubuntu

安裝

┌──(root??kali)-[~]
└─# apt-get install exuberant-ctags   
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關(guān)系樹... 完成
正在讀取狀態(tài)信息... 完成                 
下列【新】軟件包將被安裝:
  exuberant-ctags
升級了 0 個(gè)軟件包,新安裝了 1 個(gè)軟件包,要卸載 0 個(gè)軟件包,有 582 個(gè)軟件包未被升級。
需要下載 156 kB 的歸檔。
解壓縮后會消耗 358 kB 的額外空間。
獲取:1 https://mirrors.aliyun.com/kali kali-rolling/main i386 exuberant-ctags i386 1:5.9~svn20110310-15 [156 kB]
已下載 156 kB,耗時(shí) 0秒 (326 kB/s)       
正在選中未選擇的軟件包 exuberant-ctags。
(正在讀取數(shù)據(jù)庫 ... 系統(tǒng)當(dāng)前共安裝有 271253 個(gè)文件和目錄。)
準(zhǔn)備解壓 .../exuberant-ctags_1%3a5.9~svn20110310-15_i386.deb  ...
正在解壓 exuberant-ctags (1:5.9~svn20110310-15) ...
正在設(shè)置 exuberant-ctags (1:5.9~svn20110310-15) ...
update-alternatives: 使用 /usr/bin/ctags-exuberant 來在自動(dòng)模式中提供 /usr/bin/ctags (ctags)
update-alternatives: 使用 /usr/bin/ctags-exuberant 來在自動(dòng)模式中提供 /usr/bin/etags (etags)
正在處理用于 kali-menu (2021.2.3) 的觸發(fā)器 ...
正在處理用于 man-db (2.9.4-2) 的觸發(fā)器 ...
Scanning processes...                                                        
Scanning linux images...                                                     

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.
                                                                             
┌──(root??kali)-[~]
└─# wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
--2021-09-23 12:35:53--  http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
正在解析主機(jī) home.tiscali.cz (home.tiscali.cz)... 82.208.6.172
正在連接 home.tiscali.cz (home.tiscali.cz)|82.208.6.172|:80... 已連接。
已發(fā)出 HTTP 請求,正在等待回應(yīng)... 200 OK
長度:7675 (7.5K) [application/x-tar]
正在保存至: “webbench-1.5.tar.gz”

webbench-1.5.tar.gz 100%[================>]   7.50K  --.-KB/s  用時(shí) 0s      

2021-09-23 12:35:54 (422 MB/s) - 已保存 “webbench-1.5.tar.gz” [7675/7675])

                                                                             
┌──(root??kali)-[~]
└─# ls
公共  模板  視頻  圖片  文檔  下載  音樂  桌面  webbench-1.5.tar.gz
                                                                             
┌──(root??kali)-[~]
└─# tar zxvf webbench-1.5.tar.gz
webbench-1.5/
webbench-1.5/webbench.1
webbench-1.5/socket.c
webbench-1.5/webbench.c
webbench-1.5/Makefile
webbench-1.5/debian/
webbench-1.5/debian/rules
webbench-1.5/debian/dirs
webbench-1.5/debian/copyright
webbench-1.5/debian/control
webbench-1.5/debian/changelog
webbench-1.5/COPYRIGHT
webbench-1.5/ChangeLog
                                                                             
┌──(root??kali)-[~]
└─# cd webbench-1.5/
                                                                             
┌──(root??kali)-[~/webbench-1.5]
└─# make
cc -Wall -ggdb -W -O   -c -o webbench.o webbench.c
webbench.c: In function ‘a(chǎn)larm_handler’:
webbench.c:77:31: warning: unused parameter ‘signal’ [-Wunused-parameter]
   77 | static void alarm_handler(int signal)
      |                           ~~~~^~~~~~
cc -Wall -ggdb -W -O  -o webbench webbench.o  
ctags *.c
                                                                             
┌──(root??kali)-[~/webbench-1.5]
└─# make install
install -s webbench /usr/local/bin
install -m 644 webbench.1 /usr/local/man/man1
install -d /usr/local/share/doc/webbench
install -m 644 debian/copyright /usr/local/share/doc/webbench
install -m 644 debian/changelog /usr/local/share/doc/webbench
                                                                             
┌──(root??kali)-[~/webbench-1.5]
└─# webbench 
webbench [option]... URL
  -f|--force               Don't wait for reply from server.
  -r|--reload              Send reload request - Pragma: no-cache.
  -t|--time <sec>          Run benchmark for <sec> seconds. Default 30.
  -p|--proxy <server:port> Use proxy server for request.
  -c|--clients <n>         Run <n> HTTP clients at once. Default one.
  -9|--http09              Use HTTP/0.9 style requests.
  -1|--http10              Use HTTP/1.0 protocol.
  -2|--http11              Use HTTP/1.1 protocol.
  --get                    Use GET request method.
  --head                   Use HEAD request method.
  --options                Use OPTIONS request method.
  --trace                  Use TRACE request method.
  -?|-h|--help             This information.
  -V|--version             Display program version.
                                                                             
┌──(root??kali)-[~/webbench-1.5]
└─# webbench -c 100 -t 10 http://baidu.com/                              2 ?
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://baidu.com/
100 clients, running 10 sec.

Speed=31044 pages/min, 14706 bytes/sec.
Requests: 386 susceed, 4788 failed.

1.1 安裝ctags

apt-get install exuberant-ctags

ctags 為webbench的依賴

1.2 下載安裝

官網(wǎng):http://home.tiscali.cz/~cz210...

root@corwien:~# wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
root@corwien:~# tar zxvf webbench-1.5.tar.gz 
root@corwien:~# cd webbench-1.5/
root@corwien:~/webbench-1.5# make
root@corwien:~/webbench-1.5# make install
root@corwien:~/webbench-1.5# webbench 
webbench [option]... URL
 -f|--force Don't wait for reply from server.
 -r|--reload Send reload request - Pragma: no-cache.
 -t|--time <sec> Run benchmark for <sec> seconds. Default 30.
 -p|--proxy <server:port> Use proxy server for request.
 -c|--clients <n> Run <n> HTTP clients at once. Default one.
 -9|--http09 Use HTTP/0.9 style requests.
 -1|--http10 Use HTTP/1.0 protocol.
 -2|--http11 Use HTTP/1.1 protocol.
 --get Use GET request method.
 --head Use HEAD request method.
 --options Use OPTIONS request method.
 --trace Use TRACE request method.
 -?|-h|--help This information.
 -V|--version Display program version.

2、測試

用法:

// webbench -c 并發(fā)數(shù) -t 運(yùn)行測試時(shí)間 URL
 webbench -c 100 -t 10 http://baidu.com/

這里使用百度做個(gè)試驗(yàn) ^_^:

測試結(jié)果:

結(jié)果分析:
每秒鐘響應(yīng)請求數(shù):1443/60= X pages/sec,每秒鐘傳輸數(shù)據(jù)量2691621 bytes/sec。

當(dāng)并發(fā)500時(shí),成功請求1402個(gè),已經(jīng)顯示有41個(gè)連接failed了,說明超負(fù)荷了。

3、小結(jié):

1、壓力及性能測試工作應(yīng)該放到產(chǎn)品上線之前,而不是上線以后;
2、測試時(shí)并發(fā)應(yīng)當(dāng)由小逐漸加大,比如并發(fā)100時(shí)觀察一下網(wǎng)站負(fù)載是多少、打開頁面是否流暢,并發(fā)200時(shí)又是多少、網(wǎng)站打開緩慢時(shí)并發(fā)是多少、網(wǎng)站打不開時(shí)并發(fā)又是多少;
3、更詳細(xì)的進(jìn)行某個(gè)頁面測試,如電商網(wǎng)站可以著重測試購物車、推廣頁面等,因?yàn)檫@些頁面占整個(gè)網(wǎng)站訪問量比重較大。

備注:webbench 做壓力及性能測試時(shí),該軟件自身也會消耗CPU和內(nèi)存資源,為了測試準(zhǔn)確,建議將 webbench 安裝在其他的服務(wù)器上,已達(dá)到測試數(shù)據(jù)更加精確。

二、實(shí)戰(zhàn)

上邊學(xué)習(xí)了怎樣使用webbench來做壓力測試,現(xiàn)在就用這個(gè)工具來測試下自己的博客,我的博客服務(wù)器使用的是阿里云ECS,當(dāng)并發(fā)由100 到 500時(shí),看下服務(wù)器的CPU使用率和內(nèi)存使用情況,當(dāng)并發(fā)數(shù)過多時(shí),CPU會不會被占用完,網(wǎng)站此時(shí)還能否正常訪問,我們的目的就是測出網(wǎng)站能抗住多少的并發(fā)量。

1、使用?top?命令查看服務(wù)器資源使用情況

在實(shí)測之前,首先學(xué)下top命令的參數(shù)含義:

top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器。

top顯示系統(tǒng)當(dāng)前的進(jìn)程和其他狀況,是一個(gè)動(dòng)態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當(dāng)前狀態(tài).如果在前臺執(zhí)行該命令,它將獨(dú)占前臺,直到用戶終止該程序?yàn)橹? 比較準(zhǔn)確的說,top命令提供了實(shí)時(shí)的對系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務(wù)列表.該命令可以按CPU使用.內(nèi)存使用和執(zhí)行時(shí)間對任務(wù)進(jìn)行排序;而且該命令的很多特性都可以通過交互式命令或者在個(gè)人定制文件中進(jìn)行設(shè)定.

root@hey:~# top -d 2
top - 01:22:59 up 690 days,  9:42,  1 user,  load average: 0.09, 0.05, 0.05
Tasks: 117 total,   2 running, 115 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.5 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.5 st
KiB Mem:   1016272 total,   886640 used,   129632 free,   163252 buffers
KiB Swap:  1048572 total,    37120 used,  1011452 free.   449744 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
15875 root      20   0  139156  15048   9420 S  0.5  1.5  15:17.66 AliYunDun
    1 root      20   0   33372   1388    320 S  0.0  0.1   0:21.49 init
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd

統(tǒng)計(jì)信息區(qū)前五行是系統(tǒng)整體的統(tǒng)計(jì)信息。第一行是任務(wù)隊(duì)列信息,同 uptime 命令的執(zhí)行結(jié)果。其內(nèi)容如下:

01:22:59 當(dāng)前時(shí)間
up 690 days,  9:42, 系統(tǒng)運(yùn)行時(shí)間,格式為 天,時(shí):分
1 user,  當(dāng)前登錄用戶數(shù)
load average: 0.09, 0.05, 0.05 系統(tǒng)負(fù)載,即任務(wù)隊(duì)列的平均長度。三個(gè)數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。

第二、三行為進(jìn)程和CPU的信息。當(dāng)有多個(gè)CPU時(shí),這些內(nèi)容可能會超過兩行。內(nèi)容如下:

total 進(jìn)程總數(shù)
running 正在運(yùn)行的進(jìn)程數(shù)
sleeping 睡眠的進(jìn)程數(shù)
stopped 停止的進(jìn)程數(shù)
zombie 僵尸進(jìn)程數(shù)
Cpu(s): 
0.3% us 用戶空間占用CPU百分比
1.0% sy 內(nèi)核空間占用CPU百分比
0.0% ni 用戶進(jìn)程空間內(nèi)改變過優(yōu)先級的進(jìn)程占用CPU百分比
98.7% id 空閑CPU百分比
0.0% wa 等待輸入輸出的CPU時(shí)間百分比
0.0%hi:硬件CPU中斷占用百分比
0.0%si:軟中斷占用百分比
0.0%st:虛擬機(jī)占用百分比

最后兩行為內(nèi)存信息。內(nèi)容如下:

Mem:
191272k total    物理內(nèi)存總量
173656k used    使用的物理內(nèi)存總量
17616k free    空閑內(nèi)存總量
22052k buffers    用作內(nèi)核緩存的內(nèi)存量
Swap: 
192772k total    交換區(qū)總量
0k used    使用的交換區(qū)總量
192772k free    空閑交換區(qū)總量
123988k cached    緩沖的交換區(qū)總量,內(nèi)存中的內(nèi)容被換出到交換區(qū),而后又被換入到內(nèi)存,但使用過的交換區(qū)尚未被覆蓋,該數(shù)值即為這些內(nèi)容已存在于內(nèi)存中的交換區(qū)的大小,相應(yīng)的內(nèi)存再次被換出時(shí)可不必再對交換區(qū)寫入。

進(jìn)程信息區(qū)統(tǒng)計(jì)信息區(qū)域的下方顯示了各個(gè)進(jìn)程的詳細(xì)信息。首先來認(rèn)識一下各列的含義。

序號  列名    含義
a    PID     進(jìn)程id
b    PPID    父進(jìn)程id
c    RUSER   Real user name
d    UID     進(jìn)程所有者的用戶id
e    USER    進(jìn)程所有者的用戶名
f    GROUP   進(jìn)程所有者的組名
g    TTY     啟動(dòng)進(jìn)程的終端名。不是從終端啟動(dòng)的進(jìn)程則顯示為 ?
h    PR      優(yōu)先級
i    NI      nice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級
j    P       最后使用的CPU,僅在多CPU環(huán)境下有意義
k    %CPU    上次更新到現(xiàn)在的CPU時(shí)間占用百分比
l    TIME    進(jìn)程使用的CPU時(shí)間總計(jì),單位秒
m    TIME+   進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒
n    %MEM    進(jìn)程使用的物理內(nèi)存百分比
o    VIRT    進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
p    SWAP    進(jìn)程使用的虛擬內(nèi)存中,被換出的大小,單位kb。
q    RES     進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
r    CODE    可執(zhí)行代碼占用的物理內(nèi)存大小,單位kb
s    DATA    可執(zhí)行代碼以外的部分(數(shù)據(jù)段+棧)占用的物理內(nèi)存大小,單位kb
t    SHR     共享內(nèi)存大小,單位kb
u    nFLT    頁面錯(cuò)誤次數(shù)
v    nDRT    最后一次寫入到現(xiàn)在,被修改過的頁面數(shù)。
w    S       進(jìn)程狀態(tài)(D=不可中斷的睡眠狀態(tài),R=運(yùn)行,S=睡眠,T=跟蹤/停止,Z=僵尸進(jìn)程)
x    COMMAND 命令名/命令行
y    WCHAN   若該進(jìn)程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名
z    Flags   任務(wù)標(biāo)志,參考 sched.h

默認(rèn)情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列??梢酝ㄟ^下面的快捷鍵來更改顯示內(nèi)容。

更改顯示內(nèi)容通過 f 鍵可以選擇顯示的內(nèi)容。按 f 鍵之后會顯示列的列表,按 a-z 即可顯示或隱藏對應(yīng)的列,最后按回車鍵確定。
按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應(yīng)的列向右移動(dòng),而大寫的 A-Z 可以將相應(yīng)的列向左移動(dòng)。最后按回車鍵確定。
按大寫的 F 或 O 鍵,然后按 a-z 可以將進(jìn)程按照相應(yīng)的列進(jìn)行排序。而大寫的 R 鍵可以將當(dāng)前的排序倒轉(zhuǎn)。

命令使用
top使用格式

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

參數(shù)說明

d 指定每兩次屏幕信息刷新之間的時(shí)間間隔。當(dāng)然用戶可以使用s交互命令來改變之。 
p 通過指定監(jiān)控進(jìn)程ID來僅僅監(jiān)控某個(gè)進(jìn)程的狀態(tài)。 
q 該選項(xiàng)將使top沒有任何延遲的進(jìn)行刷新。如果調(diào)用程序有超級用戶權(quán)限,那么top將以盡可能高的優(yōu)先級運(yùn)行。 
S 指定累計(jì)模式 
s 使top命令在安全模式中運(yùn)行。這將去除交互命令所帶來的潛在危險(xiǎn)。 
i 使top不顯示任何閑置或者僵死進(jìn)程。 
c 顯示整個(gè)命令行而不只是顯示命令名

2、壓測并同時(shí)查看服務(wù)器top資源使用情況

500并發(fā)量壓測

root@corwien:~# webbench -c 500 -t 60 http://myblog.com/index.php

壓測結(jié)果:

500個(gè)并發(fā),在60秒內(nèi),請求成功2172個(gè),失敗數(shù)225個(gè)

我們再看下在壓測時(shí),服務(wù)器的資源使用情況:

通過上邊的三張圖,我們可以看到,當(dāng)500并發(fā)壓測時(shí),空閑CPU百分比越來越少,由99.0 id 減少到 41.3 id 再到 0.0 id,壓測結(jié)束時(shí),又恢復(fù)到正常的水平,99.0 id。說明我的網(wǎng)站500并發(fā)就扛不住了,CPU資源消耗完了,這時(shí)如果訪問我的網(wǎng)站,會出現(xiàn) 502 的情況。所以,根據(jù)壓測結(jié)果,可以更好的對網(wǎng)站的硬件配置進(jìn)行提升和對站點(diǎn)的靜態(tài)優(yōu)化。

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >