發(fā)布時間:2020-07-01
性能測試在大型網(wǎng)站系統(tǒng)的設(shè)計(jì)和開發(fā)中非常重要,通常會和容量預(yù)估等工作結(jié)合在一起,穿插在系統(tǒng)開發(fā)的不同方案。性能測試可以幫助我們及時發(fā)現(xiàn)系統(tǒng)的性能短板,評估系統(tǒng)的能力,在這個基礎(chǔ)在上再進(jìn)行針對性的性能優(yōu)化。
同時,壓力測試還可以幫助我們驗(yàn)證系統(tǒng)的穩(wěn)定性和可靠性。
一個完整的性能測試方案通常包括以下幾個方面:
1.壓力測試及生成性能報(bào)告
壓力測試一個重點(diǎn)是如何產(chǎn)生壓力,通常可以通過自己編寫腳本模擬請求,或者使用成熟的壓測工具進(jìn)行。壓力測試很重要的一點(diǎn)是如何使得模擬壓測的數(shù)據(jù)盡量真實(shí),越接近真實(shí)用戶越好。
1)根據(jù)性能報(bào)告定位系統(tǒng)瓶頸,進(jìn)行針對性優(yōu)化,測試和優(yōu)化的工作可以和日常開發(fā)并行
壓力測試完成以后,我們會拿到一個壓測報(bào)告,這個報(bào)告通常會告訴我們系統(tǒng)的QPS、TPS、響應(yīng)時延等數(shù)據(jù),這些數(shù)據(jù)可以讓我們對服務(wù)器的性能有個整體的了解,發(fā)現(xiàn)存在的問題,但是不能幫助我們定位問題。這個時候我們可以從系統(tǒng)的各個組件入手,關(guān)注系統(tǒng)的CPU、內(nèi)存、IO、網(wǎng)絡(luò),對比這些環(huán)節(jié)對整體性能的影響,確定性能問題是系統(tǒng)哪一部分造成的,然后針對性的在系統(tǒng)中逐個優(yōu)化。
2)估算容量承載能力,合理規(guī)劃系統(tǒng)資源
進(jìn)行壓力測試的一個重要目的是讓現(xiàn)有的服務(wù)器資源發(fā)揮最大的價值,經(jīng)過前期的測試和分析,這時候我們對系統(tǒng)整體的性能有了一個認(rèn)識,對服務(wù)器的承載能力有了預(yù)估,這個時候我們就可以結(jié)合業(yè)務(wù)規(guī)模配置服務(wù)器數(shù)量,CDN資源等,讓最少的資源產(chǎn)生最大的價值。
2.常用壓力測試工具選型
壓力測試很關(guān)鍵的一點(diǎn)是如何產(chǎn)生壓力,選擇哪款測試工具很重要,開發(fā)公司內(nèi)部應(yīng)用的測試工具,以便更好的適應(yīng)公司的業(yè)務(wù),作為SAAS服務(wù)的重要部分,幾個云服務(wù)提供商也紛紛開放了壓測及性能監(jiān)控服務(wù)。
大多數(shù)公司還是會選擇自己完成測試工作,這里關(guān)注一下常用的壓力測試工具。
幾款流行的壓力測試工具
(1)JMeter:Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具,用于對軟件做壓力測試,它最初被設(shè)計(jì)用于Web應(yīng)用測試但后來擴(kuò)展到其他測試領(lǐng)域。 它可以用于測試靜態(tài)和動態(tài)資源例如靜態(tài)文件、Java小服務(wù)程序、CGI腳本、Java 對象、數(shù)據(jù)庫, FTP服務(wù)器, 等等。
(2)LoadRunner
LoadRunner是惠普旗下一款自動負(fù)載測試工具,它能預(yù)測系統(tǒng)行為,優(yōu)化性能。LoadRunner強(qiáng)調(diào)的是整個企業(yè)的系統(tǒng),它通過模擬實(shí)際用戶的操作行為和實(shí)行實(shí)時性能監(jiān)測,來幫助更快的確認(rèn)和查找問題。此外,LoadRunner 能支持最寬范的協(xié)議和技術(shù),量身定做地提供解決方案。
PerformanceRunner是國內(nèi)專業(yè)商業(yè)化性能測試工具,通過模擬海量用戶并發(fā)測試整個系統(tǒng)的承受能力,實(shí)現(xiàn)壓力測試、性能測試、配置測試、峰值測試等。大限度地縮短測試時間,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周期。
3.如何監(jiān)控系統(tǒng)資源,定位性能瓶頸
壓力測試可以暴露系統(tǒng)性能問題,如高并發(fā)下訪問緩慢,服務(wù)宕機(jī)等,但是通過壓測不能具體到哪里存在瓶頸,必須要在壓測同時配合適當(dāng)?shù)馁Y源監(jiān)控,幫助我們定位問題。
4.針對測試報(bào)告進(jìn)行針對性優(yōu)化
在壓力測試發(fā)現(xiàn)問題以后,就要進(jìn)行有針對性的優(yōu)化。對于不同的系統(tǒng),這個過程的策略并不是確定的,但是大概可以劃分為以下幾個步驟:
定位性能瓶頸,找出系統(tǒng)存在的問題
不同系統(tǒng)的特點(diǎn)不同,在性能瓶頸上也有不同的表現(xiàn),一般來說,下面的幾個方面通常存在比較大的優(yōu)化空間:
(1)磁盤I/O及文件操作
由于磁盤I/O讀寫的速度要比內(nèi)存慢很多,程序在運(yùn)行過程中,如果需要等待磁盤I/O完成,那么低效的I/O操作會拖累整個系統(tǒng)。
(2)網(wǎng)絡(luò)操作
對網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行讀寫的情況與磁盤I/O類似。由于網(wǎng)絡(luò)環(huán)境的不確定性,尤其是對互聯(lián)網(wǎng)上數(shù)據(jù)的讀寫,網(wǎng)絡(luò)操作的速度可能比本地磁盤I/O更慢。
(3)CPU
對計(jì)算資源要求較高的應(yīng)用,由于其長時間、不間斷地大量占用CPU資源,那么對CPU的爭奪將導(dǎo)致性能問題。如科學(xué)計(jì)算、3D渲染等對CPU需求旺盛的應(yīng)用。
(4)高并發(fā)下的上下文切換及鎖競爭等
高并發(fā)程序如果沒有做好優(yōu)化,存在大量的鎖競爭,激烈得鎖競爭將會明顯增加線程上下文切換的開銷,對性能造成極大的影響
(5)數(shù)據(jù)庫
大部分應(yīng)用程序都離不開數(shù)據(jù)庫,而海量數(shù)據(jù)的讀寫操作可能是相當(dāng)費(fèi)時的。而應(yīng)用程序可能需要等待數(shù)據(jù)庫操作完成或者返回請求的結(jié)果集,那么緩慢的同步操作將成為系統(tǒng)瓶頸。
確定調(diào)整目標(biāo),提出解決方案
找到系統(tǒng)的性能問題以后,需要作出對應(yīng)的解決方案。
典型的影響性能的問題,比如:
(1)系統(tǒng)對高并發(fā)的場景響應(yīng)不足,如數(shù)據(jù)庫連接池過低,服務(wù)器連接數(shù)超過上限,數(shù)據(jù)庫鎖控制考慮不足等
(2)內(nèi)存泄露,如在長時間運(yùn)行下,內(nèi)存沒有正常釋放,發(fā)生宕機(jī)等
(3)數(shù)據(jù)庫優(yōu)化不足,業(yè)務(wù)日益增長,關(guān)聯(lián)表眾多,SQL不夠優(yōu)化等
定位到上述問題,接下來就是提出合理的調(diào)整目標(biāo),比如服務(wù)器資源有限,可以通過配置更多的機(jī)器,服務(wù)上云等進(jìn)行優(yōu)化;如果對高并發(fā)支持不好,就可以在代碼層面優(yōu)化,提高并發(fā)支持;數(shù)據(jù)庫性能問題,如慢查詢等問題,就可以進(jìn)行 SQL語句優(yōu)化等。
實(shí)施解決方案,進(jìn)行迭代開發(fā)
上一步的分析給出了一個初步的性能優(yōu)化方案,接下來就是針對方案中提到的內(nèi)容進(jìn)行針對性的改進(jìn)。這個過程可以應(yīng)用敏捷的思想進(jìn)行迭代,在開發(fā)完成后,為了對比優(yōu)化結(jié)果,可以對調(diào)優(yōu)后的系統(tǒng)進(jìn)行小范圍測試。
進(jìn)行基準(zhǔn)測試并分析調(diào)優(yōu)結(jié)果
數(shù)據(jù)說明一切,性能優(yōu)化的結(jié)果不能簡單的通過 “感覺系統(tǒng)變快了”來衡量,最好是通過對比優(yōu)化前后的測試結(jié)果,用圖表的方式直觀的把優(yōu)化結(jié)果展示出來?;鶞?zhǔn)測試是指通過設(shè)計(jì)科學(xué)的測試工具和方式方法,實(shí)現(xiàn)對一類測試對象的某項(xiàng)性能指標(biāo)進(jìn)行定量的和可對比的測試。對比測試結(jié)果,結(jié)合容量評估等工作,可以讓系統(tǒng)發(fā)揮最大的效用。
一個階段的優(yōu)化工作完成以后,最好是總結(jié)反思一下,比如本次優(yōu)化是否達(dá)到了目標(biāo)?系統(tǒng)的整體性能是否得到了改善?用戶體驗(yàn)是否得到了提升?以及如何在接下來的開發(fā)工作中做的更好。
推薦閱讀:
電話咨詢,400-035-7887,安排專業(yè)技術(shù)售前給您解答(產(chǎn)品試用、技術(shù)交流、服務(wù)咨詢和商務(wù)報(bào)價)。
您的信息已成功提交!
我們的客服人員稍后會與您聯(lián)系