標籤:

性能測試(上篇)

說道性能測試,可能對於初級開發人員來說並不是很清楚,這邊先簡單的舉幾個例子來說明一下。第一個例子就是12306網站,當時這個網站對外開放的初期性能還說得過去,比如實現了大家可以在網上訂購票的願望,但是當春運來臨的時候,這個網站居然掛掉了,是的,你沒看錯,網站掛掉了,隨後網站開發人員又花了大量的時間與金錢來維護和優化。第二個例子就是淘寶,大家知道雙十一的時候,每天有上億的交易量,淘寶依然堅挺。經過這兩個例子的對比,想必大家能對性能測試有一個感性的認識,但是單單感性還是不夠的,還需要知道原理和我們該如何的去做性能測試,打造一個像淘寶一樣的網站。

什麼是性能測試?

性能測試就是通過技術的手段模擬大量用戶同時訪問被測應用,觀察、記錄和分析系統的各項性能指標的過程。

性能測試的目標是評估系統的性能瓶頸,預測系統的最大用戶負載能力。

性能指標

平均響應時間(TTLB,Time to laster byte):平均每個請求從發送到接收響應的時間

合理的平均響應時間

2/5/10原則

在2秒之內給客戶響應被用戶認為是「非常有吸引力」的用戶體驗。在5秒之內響應客戶認為「比較不錯」的用戶體驗。在10秒內給用戶響應被認為「糟糕」的用戶體驗。如果超過10秒還沒有得到響應,那麼大多用戶會認為這次請求是失敗的。

平均響應時間的業務影響

根據2008年Aberdeen Group的研究報告,對於Web網站,1秒的頁面載入延遲相當於少了11%的PV(page view 打開頁面的次數),相當於降低了16%的顧客滿意度。

Compuware公司分析了超過150個網站和150萬個瀏覽頁面,發現頁面響應時間從2秒增長到10秒,會導致38%的頁面瀏覽放棄率。

性能指標--系統資源類

CPU:CPU的佔用率

內存:內存的佔用率,換頁數等

I/O:讀寫請求數、讀寫量等

帶寬:進站出站帶寬佔用率

為什麼要進行性能測試?

能夠有效評估系統的性能指標,用於系統的性能評估

能夠識系統的性能瓶頸,協助性能調優

能夠指導突發流量承載方案的指定

能夠用戶系統運維成本的預算

性能測試的一般分類

負載測試:

為了驗證系統設計符合正常業務負載情況下系統性能表現的測試

壓力測試

為了驗證系統在極端負載情況下的性能表現的測試

開發人員進行的性能測試更加關注在一定負載情況下各個系統資源的佔用率,從而找到內存泄漏、連接泄漏和系統的性能瓶頸

如何進行性能測試?

簡單說明一下,我們接下來的介紹都是基於Linux系統的性能測試,所以在開始性能測試之前,需要自己有一個Linux伺服器,我所使用的Linux伺服器是Centos 6.3版本的Linux,要問我為什麼選擇Centos的Linux,原因就是圖形界面很好,安裝時沒有那麼多的配置信息,而且就現在來說是免費的。

一.使用Top獲取進程的資源佔用信息

top命令是Linux系統的命令

登錄Linux系統,輸入top命令就可以看到系統進程的資源佔用信息,以下為我測試時的截圖:

好的,讓我來認識以下上面的圖裡面的東西都是啥。

PID:系統的進程

USER:哪個用戶打開的這個進程

PRI:進程的優先權,代表這個進程可被執行的優先順序,其值越小,優先順序就越高,越早被執行

NI:進程Nice值,進程可被執行的優先順序的修正數值,PRI(new)=PRI(old)+nice,也就是說nice值越小,進程的優先順序越高

VIRT:虛擬內存的大小

RES:真實的在物理裡面內存的大小

SHR:共享內存的真實佔用的大

%CPU:cpu佔用的大小

%MEM;內存佔用的大小

TIME+:真正運行的這個進程的時間長度

COMMAND:具體運行的哪個任務

就我目前的總結經驗來說,內存的佔用大小和cpu的使用率是我分析的點,那麼其中top這個工具最關鍵的是排序,比如我們想要CPU按照倒敘排列,既我們想知道哪個進程佔用CPU的使用率最高,那麼可以使用下面的命令

F Kn

上面的只是舉個簡單的例子,那麼下面截圖是詳細的命令說明

通過截圖我們可以看到「k」只是cpu的簡單使用,我們還可以用L、M、N、O、P、J等,這些根據我們自己的需求去選擇,當然了前提是你得用"F"或者「O」來打開排序界面,如果我們想了解更多詳細的介紹,可以通過使用「H」來打開幫助界面,作為額外擴展,給大家一個命令,這個命令的意思是展示所有的進程

top -ab -n 1n

二.系統性能統計工具Sysstat

1.安裝sysstat

通過下面的命令列舉出系統中sysstat的安裝包

yum list sysstatn

以下為我機器的截圖:

截圖顯示有一個安裝包為sysstat.i686,執行下面的命令安裝

yum install sysstat.i686 -yn

這條命令執行完畢看到Complete!即是表示安裝成功!

2.配置文件的修改

默認為每10分鐘獲取一次數據,但是對於測試來說太慢了,我們調整一下把它變成每1分鐘獲取一次,配置文件的位置為 /etc/cron.d/sysstat

vim /etc/cron.d/sysstatn

打開之後的截圖為:

我們輸入

in

然後把游標所在的位置前面的10改為1,按esc,之後輸入

wqn

保存退出,這個時候我們就更改了sysstat默認的每10分鐘獲取一次數據,那麼sysstat這個工具獲取的數據保存在哪裡呢?保存在/var/log/sa下面。

3.數據文件的生成

需要說明的是首次安裝並不會生成配置文件,sysstat需要時間去執行,但是儘管我們把每10分鐘生成一次配置文件改為了每一分鐘生成一次配置文件,我們在/var/log/sa下依舊看不到配置文件,作為第一次運行,我們需要自己手動的去生成一個配置文件,以下為生成配置文件的命令

sar -o 27n

上面這條命令意思是將命令結果以二進位格式存放在文件中,需要注意的是-o後面的參數為當前的日期,比如我寫的這條命令的時候為2017年6月27日,如果超過了當前日期或者少於當前日期,系統都是不會生成配置文件的,但是需要注意的是,雖然文件沒有生成,但是這個進程卻被系統在不斷的執行。第一次輸入創建命令的時候會發現無法輸入字元和命令,這個時候sysstat是在不斷的寫入文件的過程,簡單的理解就是程序在執行中,但是對於我們來說我們想要繼續操作其他命令,那麼我們可以執行下面的兩個指令,一個是Ctrl+z,一個是Ctrl+c.

這裡作為擴展對這兩個命令做一個簡單的說明:

Ctrl+z:是將任務中止(暫停的意思),但是此任務並沒有結束,他仍然在進程中他只是維持掛起的狀態,用戶可以使用fg/bg操作繼續前台或後台的任務,fg命令重新啟動前台被中斷的任務,bg命令把被中斷的任務放在後台執行.例如:當你vi一個文件時,如果需要用shell執行別的操作,但是你又不打算關閉vi,因為你得存檔推出,你可以簡單的按下ctrl+z,shell會將vi進程掛起~,當你結束了那個shell操作之後,你可以用fg命令繼續vi你的文件。

Ctrl+c:強制中斷程序的執行,,進程已經終止。

所以這個時候我們需要的是程序能夠繼續執行,但是又能夠執行別的任務,所以我們就可以使用Ctrl+z,然後使用bg命令讓程序在後台執行。這個時候我們打開配置文件路徑

cd /var/log/sanlsn

然後就可以看到一個名為sa27的配置文件,這個文件是二進位形式的,以下為截圖:

4.性能分析之---cup

我們開始的第一分析為cup,執行下面命令

sar -q -f sa27n

通過上面的命令我們會得到下面的結果:

解釋:

runq-sz:等待執行的任務隊列長度,越長阻塞越嚴重

plist-sz:隊列中的任務總數,任務越多,負載越高

ldavg-1,ldavg-5,ldavg-15:system load average:1分鐘、5分鐘、15分鐘內系統負載描述。值是通過執行中的任務和等待執行的任務的個數的平均值得到的。la>cpu總數時表示CPU壓力大

通過這個命令我們可以知道CPU的任務繁重程度

第二個命令顯示CPU佔比

sar -p -f sa27n

%steal:管理程序,為另一個虛擬進程提供服務而等待虛擬CPU的百分比

5.性能分析之----內存

1)命令:這個命令展示內存的百分比

sar -r -f sa27n

解釋:

kbmemfree:空閑內存

kbmemused:已經使用的物理內存多少

%memused:內存使用率

kbbuffers/kbcached:buffer/cached:是為了提高文件讀取的性能的磁碟緩存

kbcached:實際上是針對文件系統的,是文件的緩存

kbbuffers:是比kbcached更底層的磁碟塊的緩存

kbcommit:為了保證程序的正常運行需要的內存百分比,為預估值

2)命令:換頁頻繁程度

sar -B -f sa27n

3)命令:swp交換的頻繁程度

sar -W -f sa27n

6.性能分析之----I/O監控

1)命令:

sar -b -f sa27n

解釋:

tps:每秒鐘物理設備的I/O請求次數

rtps:每秒鐘從物理設備讀入的請求次數

wtps:每秒鐘向物理設備寫入的請求次數

bread/s:每秒鐘從物理設備讀入的數據量,單位為 塊/s

bwrtn/s:每秒鐘向物理設備寫入的數據量,單位為 塊/s

2)命令:

sar -d -f sa27n

7.性能優化值----NetWork監控

1)命令:網卡數據交換量

sar -n DEV -f sa27n

解釋:

rxpck/s:每秒鐘接收的數據包

txpck/s:每秒鐘發送的數據包

rxbyt/s:每秒鐘接收的位元組數

txbyt/s:每秒鐘發送的位元組數

rxcmp/s:每秒鐘接收的壓縮數據包

txcmp/s:每秒鐘發送的壓縮數據包

rxmcst/s:每秒鐘接收的多播數據包

2)命令:

sar -n NFS -f sa27n

IFACE:LAN介面

rxerr/s:每秒鐘接收的壞數據包

txerr/s:每秒鐘發送的壞數據包

coll/s:每秒衝突數

rxdrop/s:因為緩衝充滿,每秒鐘丟棄的已接收數據包數

txdrop/s:因為緩衝充滿,每秒鐘丟棄的已發送數據包

txcarr/s:發送數據包時,每秒載波錯誤數

rxfram/s:每秒接收數據包的帖對齊錯誤數

rxfifo/s:接收的數據包每秒FIFO過速的錯誤數

txfifo/s:發送的數據包每秒FIFO過速的錯誤數


推薦閱讀:

如何看待Facebook 的 HHVM 引擎將轉用 Hack 語言?
PHP初學者,在做項目的時候涉及到定時觸發,就是說,提醒用戶有私信消息,請教後台是不是PHP應付不來?需要 Python 這樣的語言支持?
php 如何取img屬性值 src?
PHP的幾種加密演算法

TAG:PHP |