性能測試是性能優(yōu)化的前提和基礎(chǔ), 也是性能優(yōu)化結(jié)果的檢查和度量標(biāo)準(zhǔn)。不同視角下的網(wǎng)站性能有不同的標(biāo)準(zhǔn) , 也有不同的優(yōu)化手段。
一般來說,性能測試基本上會(huì)有以下幾個(gè)視角的指標(biāo):
1.用戶角度下。
2.開發(fā)人員角度。
3.運(yùn)維人員角度。
不同的視角下會(huì)有不同的性能指標(biāo),不同的標(biāo)準(zhǔn)也會(huì)有不同的指標(biāo),一般來說,從開發(fā)到測試,網(wǎng)站性能測試的主要指標(biāo)主要有幾點(diǎn):響應(yīng)時(shí)間、并發(fā)數(shù)、吞吐量、性能計(jì)數(shù)器等,下面我就分別總結(jié)一下。
一、響應(yīng)時(shí)間
通俗來講,就是一個(gè)從客戶端或者瀏覽器端發(fā)起請求后到最后得到響應(yīng)的這段時(shí)間。直觀的反應(yīng)了系統(tǒng)的快慢。

注:
我們可以使用測試程序模擬應(yīng)用程序,記錄收到響應(yīng)和發(fā)出請求的時(shí)間差的平均,來計(jì)算平均響應(yīng)時(shí)間,但是記錄和獲取時(shí)間操作也是需要花費(fèi)時(shí)間的,如果測試目標(biāo)操作本身需要花費(fèi)的時(shí)間很少,幾微秒,那么很難得到系統(tǒng)的響應(yīng)時(shí)間。
實(shí)踐中通常采用的辦法是重復(fù)請求,比如一 個(gè)請求操作重復(fù)執(zhí)行一 萬次, 測試一 萬次執(zhí)行需要的總響應(yīng)時(shí)間之和,然后除以一 萬,得到單次請求的響應(yīng)時(shí)間。
二、并發(fā)數(shù)
指系統(tǒng)能夠同時(shí)處理請求的數(shù)量,根據(jù)這個(gè)數(shù)量可以得到系統(tǒng)的負(fù)載性。對于網(wǎng)站而言,并發(fā)數(shù)即使網(wǎng)站用戶并發(fā)用戶數(shù),指同時(shí)提交請求的用戶數(shù)。
同時(shí)關(guān)于用戶數(shù)還會(huì)有以下的一個(gè)公式:
網(wǎng)站系統(tǒng)用戶數(shù)>>網(wǎng)站在線用戶數(shù)>>網(wǎng)站并發(fā)用戶數(shù)
一般而言,我們的產(chǎn)品設(shè)計(jì)初期,產(chǎn)品經(jīng)理和運(yùn)營人員需要規(guī)劃不同發(fā)展階段的網(wǎng)站系統(tǒng)用戶數(shù),并以此為依據(jù),規(guī)劃不同階段的網(wǎng)站的并發(fā)用戶數(shù),讓開發(fā)進(jìn)行參考開發(fā)。
測試程序通過多線程模擬并發(fā)用戶的辦法來測試系統(tǒng)的并發(fā)處理能力,為了真實(shí)模擬用戶行為,測試程序并不是啟動(dòng)多線程然后不停地發(fā)送請求,而是在兩次請求之間加入一 個(gè)隨機(jī)等待時(shí)間, 這個(gè)時(shí)間被稱作思考時(shí)間。
三、吞吐量
吞吐量是指單位時(shí)間內(nèi)系統(tǒng)處理的請求數(shù)量,體現(xiàn)系統(tǒng)的整理處理能看。使用"請求數(shù)/秒"、"業(yè)務(wù)處理數(shù)/小時(shí)"。像TPS(每秒事務(wù)數(shù)是吞吐量的一個(gè)常用的量化指標(biāo)),還有HPS(每秒http請求數(shù)),QPS(每秒查詢數(shù))
在系統(tǒng)并發(fā)數(shù)由小逐漸增大的過程中(這個(gè)過程也伴隨著服務(wù)器系統(tǒng)資源消耗逐漸增大), 系統(tǒng)吞吐量先是逐漸增加, 達(dá)到一個(gè)極限后,隨著并發(fā)數(shù)的增加反而下降, 達(dá)到系統(tǒng)崩潰點(diǎn)后,系統(tǒng)資源耗盡,吞吐量為零。
而這個(gè)過程中 , 響應(yīng)時(shí)間則是先保持小幅上升, 到達(dá)吞吐量極限后, 快速上升, 到達(dá)系統(tǒng)崩潰點(diǎn)后,系統(tǒng)失去響應(yīng)。
網(wǎng)站性能優(yōu)化的目的 , 除了改善用戶體驗(yàn)的響應(yīng)時(shí)間, 還要盡量提高系統(tǒng)吞吐量最大限度利用服務(wù)器資源。
四、性能計(jì)數(shù)器
它是描述服務(wù)器或操作系統(tǒng)性能的一些數(shù)據(jù)指標(biāo)。包括 System Load 、對象與線程數(shù)內(nèi)存使用、CPU 使用、磁盤與網(wǎng)絡(luò) I/0 等指標(biāo)。這些指標(biāo)也是系統(tǒng)監(jiān)控的重要參數(shù),對這些指標(biāo)設(shè)置報(bào)警闊值, 當(dāng)監(jiān)控系統(tǒng)發(fā)現(xiàn)性能計(jì)數(shù)器超過闕值時(shí), 就向運(yùn)維和開發(fā)人員報(bào)警, 及時(shí)發(fā)現(xiàn)處理系統(tǒng)異常。
System Load 即系統(tǒng)負(fù)載, 指當(dāng)前正在被CPU 執(zhí)行和等待被CPU 執(zhí)行的進(jìn)程數(shù)目總和,是反映系統(tǒng)忙閑程度的重要指標(biāo)。多核 CPU 的情況下,完美情況是所有CPU 都在使用, 沒有進(jìn)程在等待處理, 所以Load 的理想值是 CPU 的數(shù)目。當(dāng)Load 值低于 CPU 數(shù)目的時(shí)候, 表示CPU 有空閑, 資源存在浪費(fèi);當(dāng)Load 值高于CPU 數(shù)目的時(shí)候,表示進(jìn)程在排隊(duì)等待 CPU 調(diào)度, 表示系統(tǒng)資源不足, 影響應(yīng)用程序的執(zhí)行性能。在 Linux 系統(tǒng)中使用 top 命令查看, 該值是三個(gè)浮點(diǎn)數(shù),表示最近 1分鐘, 10 分鐘,15 分鐘的運(yùn)行隊(duì)列平均進(jìn)程數(shù)。xQ

關(guān)于top命令查看系統(tǒng)性能指標(biāo),能夠看我這篇文章:
jvm定位問題與排查
性能測試方法
性能測試是一個(gè)總稱,具體可細(xì)分為性能測試、負(fù)載測試、壓力測試、穩(wěn)定性測試。
性能測試
以系統(tǒng)設(shè)計(jì)初期規(guī)劃的性能指標(biāo)為預(yù)期目標(biāo),對系統(tǒng)不斷施加壓力,驗(yàn)證系統(tǒng)在資源可接受范圍內(nèi),是否能達(dá)到性能預(yù)期。
負(fù)載測試
對系統(tǒng)不斷地增加并發(fā)請求以增加系統(tǒng)壓力,直到系統(tǒng)的某項(xiàng)或多項(xiàng)性能指標(biāo)達(dá)到安全臨界值,如某種資源巳經(jīng)呈飽和狀態(tài),這時(shí)繼續(xù)對系統(tǒng)施加壓力,系統(tǒng)的處理能力不但不能提高,反而會(huì)下降。查看這時(shí)候系統(tǒng)的負(fù)載。
壓力測試
超過安全負(fù)載的情況下,對系統(tǒng)繼續(xù)施加壓力,直到系統(tǒng)崩潰或不能再處理任何請求,以此獲得系統(tǒng)最大壓力承受能力。
穩(wěn)定性測試
被測試系統(tǒng)在特定硬件、軟件、網(wǎng)絡(luò)環(huán)境條件下,給系統(tǒng)加載一定業(yè)務(wù)壓力,使系統(tǒng)運(yùn)行一 段較長時(shí)間,以此檢測系統(tǒng)是否穩(wěn)定。
性能測試是一個(gè)不斷對系統(tǒng)增加訪問壓力,以獲得系統(tǒng)性能指標(biāo)、最大負(fù)載能力最大壓力承受能力的過程。所謂的增加訪間壓力,在系統(tǒng)測試環(huán)境中,就是不斷增加測試程序的并發(fā)請求數(shù),一般說來,性能測試遵循如圖:
橫坐標(biāo)表示消耗的系統(tǒng)資源,縱坐標(biāo)表示系統(tǒng)處理能力(吞吐量)。
在開始階段,隨著并發(fā)請求數(shù)目的增加,系統(tǒng)使用較少的資源就達(dá)到較好的處理能力(a b段),這一段是網(wǎng)站的日常運(yùn)行區(qū)間,網(wǎng)站的絕大部分訪間負(fù)載壓力都集中在這一 段區(qū)間被稱作性能測試.測試目標(biāo)是評估系統(tǒng)性能是否符合需求及設(shè)計(jì)目標(biāo);隨著壓力的持續(xù)增加,系統(tǒng)處理能力增加變緩,直到達(dá)到一 個(gè)最大值 (c 點(diǎn)),這是系統(tǒng)的最大負(fù)載點(diǎn),這一 段被稱作負(fù)載測試。測試目標(biāo)是評估當(dāng)系統(tǒng)因?yàn)橥话l(fā)事件超出日常訪問壓力的情況下,保證系統(tǒng)正常運(yùn)行情況下能夠承受的最大訪問負(fù)載壓力;超過這個(gè)點(diǎn)后, 再增加壓力, 系統(tǒng)的處理能力反而下降, 而資源消耗卻更多,直到資源消耗達(dá)到極限 (d 點(diǎn)),這個(gè)點(diǎn)可以看作是系統(tǒng)的崩潰點(diǎn),超過這個(gè)點(diǎn)繼續(xù)加大并發(fā)請求數(shù)目,系統(tǒng)不能再處理任何請求,這一 段被稱作壓力測試,測試目標(biāo)是評估可能導(dǎo)致系統(tǒng)崩潰的最大訪問負(fù)載壓力。
根據(jù)性能測試,我們可以做出性能測試報(bào)告:
性能測試報(bào)告能夠反映上述性能測試曲線的規(guī)律,可以得到系統(tǒng)性能是否滿足設(shè)計(jì)目標(biāo)和業(yè)務(wù)要求 、系統(tǒng)最大負(fù)載能力、系統(tǒng)最大壓力承受能力等重要信息.
關(guān)于性能優(yōu)化的策略
排查一個(gè)網(wǎng)站的性能瓶頸和排查一個(gè)程序的性能瓶頸的手法基本相同:檢查請求處理的各個(gè)環(huán)節(jié)的日志,分析哪個(gè)環(huán)節(jié)響應(yīng)時(shí)間不合理、 超過預(yù)期;然后檢查監(jiān)控?cái)?shù)據(jù),分析影響性能的主要因素是內(nèi)存、 磁盤、 網(wǎng)絡(luò)、 還是 CPU , 是代碼問題還是架構(gòu)設(shè)計(jì)不合理,或者系統(tǒng)資源確實(shí)不足。
找到問題后就可以進(jìn)行性能優(yōu)化了。一般分為三類:
前端優(yōu)化
服務(wù)器端優(yōu)化
存儲數(shù)據(jù)庫優(yōu)化
具體的優(yōu)化后面會(huì)更新
摘自《大型網(wǎng)站技術(shù)架構(gòu)核心原理與實(shí)踐》閱讀筆記