Web網站壓力及性能測試

在項目上線以前,都須要作壓力測試,目的是看下咱們的網站能抗住多少的壓力,能承擔多少併發,若是不作壓力測試,一旦出現大訪問量時,咱們的網站會掛掉。php

1、Webbench測試併發

Webbench是Linux下的一個網站壓力測試工具,能測試處在相同硬件上,不一樣服務的性能以及不一樣硬件上同一個服務的運行情況。webbench的標準測試能夠向咱們展現服務器的兩項內容:每分鐘相應請求數和每秒鐘傳輸數據量。webbench最多能夠模擬3萬個併發鏈接去測試網站的負載能力。html

測試的環境是 Linux Ubuntulinux

一、安裝

1.1 安裝ctags

apt-get install exuberant-ctags

ctags 爲webbench的依賴web

1.2 下載安裝

官網: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.

二、測試

用法:安全

// webbench -c 併發數 -t 運行測試時間 URL
 webbench -c 100 -t 10 http://baidu.com/

這裏使用百度作個試驗 ^_^:服務器

測試結果:
clipboard.png併發

結果分析:
每秒鐘響應請求數:1443/60= X pages/sec,每秒鐘傳輸數據量2691621 bytes/sec。函數

當併發500時,成功請求1402個,已經顯示有41個鏈接failed了,說明超負荷了。工具

三、小結:

一、壓力及性能測試工做應該放到產品上線以前,而不是上線之後;
二、測試時併發應當由小逐漸加大,好比並發100時觀察一下網站負載是多少、打開頁面是否流暢,併發200時又是多少、網站打開緩慢時併發是多少、網站打不開時併發又是多少;
三、更詳細的進行某個頁面測試,如電商網站能夠着重測試購物車、推廣頁面等,由於這些頁面佔整個網站訪問量比重較大。

備註:webbench 作壓力及性能測試時,該軟件自身也會消耗CPU和內存資源,爲了測試準確,建議將 webbench 安裝在其餘的服務器上,已達到測試數據更加精確。

2、實戰

上邊學習了怎樣使用webbench來作壓力測試,如今就用這個工具來測試下本身的博客,個人博客服務器使用的是阿里雲ECS,當併發由100 到 500時,看下服務器的CPU使用率和內存使用狀況,當併發數過多時,CPU會不會被佔用完,網站此時還可否正常訪問,咱們的目的就是測出網站能抗住多少的併發量。

一、使用 top 命令查看服務器資源使用狀況

在實測以前,首先學下top命令的參數含義:

top命令是Linux下經常使用的性能分析工具可以實時顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器。

top顯示系統當前的進程和其餘情況,是一個動態顯示過程,便可以經過用戶按鍵來不斷刷新當前狀態.若是在前臺執行該命令,它將獨佔前臺,直到用戶終止該程序爲止. 比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最「敏感」的任務列表.該命令能夠按CPU使用.內存使用和執行時間對任務進行排序;並且該命令的不少特性均可以經過交互式命令或者在我的定製文件中進行設定.

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

統計信息區前五行是系統總體的統計信息。第一行是任務隊列信息,同 uptime 命令的執行結果。其內容以下:

01:22:59 當前時間
up 690 days,  9:42, 系統運行時間,格式爲 天,時:分
1 user,  當前登陸用戶數
load average: 0.09, 0.05, 0.05 系統負載,即任務隊列的平均長度。三個數值分別爲 1分鐘、5分鐘、15分鐘前到如今的平均值。

第2、三行爲進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容以下:

total 進程總數
running 正在運行的進程數
sleeping 睡眠的進程數
stopped 中止的進程數
zombie 殭屍進程數
Cpu(s): 
0.3% us 用戶空間佔用CPU百分比
1.0% sy 內核空間佔用CPU百分比
0.0% ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
98.7% id 空閒CPU百分比
0.0% wa 等待輸入輸出的CPU時間百分比
0.0%hi:硬件CPU中斷佔用百分比
0.0%si:軟中斷佔用百分比
0.0%st:虛擬機佔用百分比

最後兩行爲內存信息。內容以下:

Mem:
191272k total    物理內存總量
173656k used    使用的物理內存總量
17616k free    空閒內存總量
22052k buffers    用做內核緩存的內存量
Swap: 
192772k total    交換區總量
0k used    使用的交換區總量
192772k free    空閒交換區總量
123988k cached    緩衝的交換區總量,內存中的內容被換出到交換區,然後又被換入到內存,但使用過的交換區還沒有被覆蓋,該數值即爲這些內容已存在於內存中的交換區的大小,相應的內存再次被換出時可沒必要再對交換區寫入。

進程信息區統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。

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

默認狀況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。能夠經過下面的快捷鍵來更改顯示內容。

更改顯示內容經過 f 鍵能夠選擇顯示的內容。按 f 鍵以後會顯示列的列表,按 a-z 便可顯示或隱藏對應的列,最後按回車鍵肯定。
按 o 鍵能夠改變列的顯示順序。按小寫的 a-z 能夠將相應的列向右移動,而大寫的 A-Z 能夠將相應的列向左移動。最後按回車鍵肯定。
按大寫的 F 或 O 鍵,而後按 a-z 能夠將進程按照相應的列進行排序。而大寫的 R 鍵能夠將當前的排序倒轉。

命令使用
top使用格式

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

參數說明

d 指定每兩次屏幕信息刷新之間的時間間隔。固然用戶可使用s交互命令來改變之。 
p 經過指定監控進程ID來僅僅監控某個進程的狀態。 
q 該選項將使top沒有任何延遲的進行刷新。若是調用程序有超級用戶權限,那麼top將以儘量高的優先級運行。 
S 指定累計模式 
s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。 
i 使top不顯示任何閒置或者僵死進程。 
c 顯示整個命令行而不僅是顯示命令名

二、壓測並同時查看服務器top資源使用狀況

一、500併發量壓測

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

壓測結果:

clipboard.png

500個併發,在60秒內,請求成功2172個,失敗數225個

咱們再看下在壓測時,服務器的資源使用狀況:

clipboard.png

clipboard.png

clipboard.png

經過上邊的三張圖,咱們能夠看到,當500併發壓測時,空閒CPU百分比愈來愈少,由99.0 id 減小到 41.3 id 再到 0.0 id,壓測結束時,又恢復到正常的水平,99.0 id。說明個人網站500併發就扛不住了,CPU資源消耗完了,這時若是訪問個人網站,會出現 502 的狀況。因此,根據壓測結果,能夠更好的對網站的硬件配置進行提高和對站點的靜態優化。


參考博文:
Web網站壓力及性能測試工具WebBench使用指南
服務器扛不住webbench 500併發,如何優化 ?
linux的top命令參數詳解

相關文章
相關標籤/搜索