網(wǎng)站上線無(wú)憂:Web網(wǎng)站壓力及性能測(cè)試
在項(xiàng)目上線之前,都需要做壓力測(cè)試,目的是看下我們的網(wǎng)站能抗住多少的壓力,能承擔(dān)多少并發(fā),如果不做壓力測(cè)試,一旦出現(xiàn)大訪問(wèn)量時(shí),我們的網(wǎng)站會(huì)掛掉。
一、Webbench測(cè)試并發(fā)
Webbench是Linux下的一個(gè)網(wǎng)站壓力測(cè)試工具,能測(cè)試處在相同硬件上,不同服務(wù)的性能以及不同硬件上同一個(gè)服務(wù)的運(yùn)行狀況。webbench的標(biāo)準(zhǔn)測(cè)試可以向我們展示服務(wù)器的兩項(xiàng)內(nèi)容:每分鐘相應(yīng)請(qǐng)求數(shù)和每秒鐘傳輸數(shù)據(jù)量。webbench最多可以模擬3萬(wàn)個(gè)并發(fā)連接去測(cè)試網(wǎng)站的負(fù)載能力。
測(cè)試的環(huán)境是 Linux Ubuntu
1、安裝
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、測(cè)試
用法:
- // webbench -c 并發(fā)數(shù) -t 運(yùn)行測(cè)試時(shí)間 URL
- webbench -c 100 -t 10 http://baidu.com/
這里使用百度做個(gè)試驗(yàn) ^_^:
測(cè)試結(jié)果:
結(jié)果分析:
每秒鐘響應(yīng)請(qǐng)求數(shù):1443/60= X pages/sec,每秒鐘傳輸數(shù)據(jù)量2691621 bytes/sec。
當(dāng)并發(fā)500時(shí),成功請(qǐng)求1402個(gè),已經(jīng)顯示有41個(gè)連接failed了,說(shuō)明超負(fù)荷了。
3、小結(jié):
- 壓力及性能測(cè)試工作應(yīng)該放到產(chǎn)品上線之前,而不是上線以后;
- 測(cè)試時(shí)并發(fā)應(yīng)當(dāng)由小逐漸加大,比如并發(fā)100時(shí)觀察一下網(wǎng)站負(fù)載是多少、打開頁(yè)面是否流暢,并發(fā)200時(shí)又是多少、網(wǎng)站打開緩慢時(shí)并發(fā)是多少、網(wǎng)站打不開時(shí)并發(fā)又是多少;
- 更詳細(xì)的進(jìn)行某個(gè)頁(yè)面測(cè)試,如電商網(wǎng)站可以著重測(cè)試購(gòu)物車、推廣頁(yè)面等,因?yàn)檫@些頁(yè)面占整個(gè)網(wǎng)站訪問(wèn)量比重較大。
備注:webbench 做壓力及性能測(cè)試時(shí),該軟件自身也會(huì)消耗CPU和內(nèi)存資源,為了測(cè)試準(zhǔn)確,建議將 webbench 安裝在其他的服務(wù)器上,已達(dá)到測(cè)試數(shù)據(jù)更加精確。
二、實(shí)戰(zhàn)
上邊學(xué)習(xí)了怎樣使用webbench來(lái)做壓力測(cè)試,現(xiàn)在就用這個(gè)工具來(lái)測(cè)試下自己的博客,我的博客服務(wù)器使用的是阿里云ECS,當(dāng)并發(fā)由100 到 500時(shí),看下服務(wù)器的CPU使用率和內(nèi)存使用情況,當(dāng)并發(fā)數(shù)過(guò)多時(shí),CPU會(huì)不會(huì)被占用完,網(wǎng)站此時(shí)還能否正常訪問(wèn),我們的目的就是測(cè)出網(wǎng)站能抗住多少的并發(fā)量。
1、使用 top 命令查看服務(wù)器資源使用情況
在實(shí)測(cè)之前,首先學(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)顯示過(guò)程,即可以通過(guò)用戶按鍵來(lái)不斷刷新當(dāng)前狀態(tài).如果在前臺(tái)執(zhí)行該命令,它將獨(dú)占前臺(tái),直到用戶終止該程序?yàn)橹? 比較準(zhǔn)確的說(shuō),top命令提供了實(shí)時(shí)的對(duì)系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務(wù)列表.該命令可以按CPU使用.內(nèi)存使用和執(zhí)行時(shí)間對(duì)任務(wù)進(jìn)行排序;而且該命令的很多特性都可以通過(guò)交互式命令或者在個(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ì)列的平均長(zhǎng)度。三個(gè)數(shù)值分別為 1分鐘、5分鐘、15分鐘前到現(xiàn)在的平均值。
第二、三行為進(jìn)程和CPU的信息。當(dāng)有多個(gè)CPU時(shí),這些內(nèi)容可能會(huì)超過(guò)兩行。內(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)改變過(guò)優(yōu)先級(jí)的進(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)存,但使用過(guò)的交換區(qū)尚未被覆蓋,該數(shù)值即為這些內(nèi)容已存在于內(nèi)存中的交換區(qū)的大小,相應(yīng)的內(nèi)存再次被換出時(shí)可不必再對(duì)交換區(qū)寫入。
進(jìn)程信息區(qū)統(tǒng)計(jì)信息區(qū)域的下方顯示了各個(gè)進(jìn)程的詳細(xì)信息。首先來(lái)認(rèn)識(shí)一下各列的含義。
- 序號(hào) 列名 含義
- 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)先級(jí)
- i NI nice值。負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí)
- 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 頁(yè)面錯(cuò)誤次數(shù)
- v nDRT ***一次寫入到現(xiàn)在,被修改過(guò)的頁(yè)面數(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 列。可以通過(guò)下面的快捷鍵來(lái)更改顯示內(nèi)容。
更改顯示內(nèi)容通過(guò) f 鍵可以選擇顯示的內(nèi)容。按 f 鍵之后會(huì)顯示列的列表,按 a-z 即可顯示或隱藏對(duì)應(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ù)說(shuō)明
d 指定每?jī)纱纹聊恍畔⑺⑿轮g的時(shí)間間隔。當(dāng)然用戶可以使用s交互命令來(lái)改變之。 p 通過(guò)指定監(jiān)控進(jìn)程ID來(lái)僅僅監(jiān)控某個(gè)進(jìn)程的狀態(tài)。 q 該選項(xiàng)將使top沒有任何延遲的進(jìn)行刷新。如果調(diào)用程序有超級(jí)用戶權(quán)限,那么top將以盡可能高的優(yōu)先級(jí)運(yùn)行。 S 指定累計(jì)模式 s 使top命令在安全模式中運(yùn)行。這將去除交互命令所帶來(lái)的潛在危險(xiǎn)。 i 使top不顯示任何閑置或者僵死進(jìn)程。 c 顯示整個(gè)命令行而不只是顯示命令名
2、壓測(cè)并同時(shí)查看服務(wù)器top資源使用情況
1)、500并發(fā)量壓測(cè)
- root@corwien:~# webbench -c 500 -t 60 http://myblog.com/index.php
壓測(cè)結(jié)果:
500個(gè)并發(fā),在60秒內(nèi),請(qǐng)求成功2172個(gè),失敗數(shù)225個(gè)
我們?cè)倏聪略趬簻y(cè)時(shí),服務(wù)器的資源使用情況:
通過(guò)上邊的三張圖,我們可以看到,當(dāng)500并發(fā)壓測(cè)時(shí),空閑CPU百分比越來(lái)越少,由99.0 id 減少到 41.3 id 再到 0.0 id,壓測(cè)結(jié)束時(shí),又恢復(fù)到正常的水平,99.0 id。說(shuō)明我的網(wǎng)站500并發(fā)就扛不住了,CPU資源消耗完了,這時(shí)如果訪問(wèn)我的網(wǎng)站,會(huì)出現(xiàn) 502 的情況。所以,根據(jù)壓測(cè)結(jié)果,可以更好的對(duì)網(wǎng)站的硬件配置進(jìn)行提升和對(duì)站點(diǎn)的靜態(tài)優(yōu)化。