如何利用性能測試優(yōu)化系統(tǒng)
對于一個開發(fā)比較成熟的業(yè)務系統(tǒng)而言,功能相對已經(jīng)完善,但在大業(yè)務量的情況下往往會出現(xiàn)各種異常。對此,需通過對系統(tǒng)進行配置修改或者產(chǎn)品框架調整來優(yōu)化系統(tǒng)。 在優(yōu)化系統(tǒng)過程中,最有效的手段就是對系統(tǒng)做性能測試,通過測試結果的收集分析,不斷進行系統(tǒng)優(yōu)化,最終達到系統(tǒng)在大業(yè)務量情況下穩(wěn)定運行的目的。
一、測試方法
測試方法主要通過測試過程中的測試步驟體現(xiàn)出來。測試步驟需根據(jù)每次的測試結果不斷調整,一個完善的測試方法需要不斷地進行性能測試和性能調整。在開始性能調整循環(huán)之前,必須確定以下兩點:一是建立業(yè)務模型,通過統(tǒng)計或數(shù)學模型的方法建立起科學的業(yè)務模型,如業(yè)務流程分布比例、平均負荷、峰值負載等;二是設置性能指標,作為判斷設計指標和實際性能處理指標的基準值,總體的系統(tǒng)吞吐量、系統(tǒng)的吞吐效率、響應時延等都是用于測量性能的常用度量標準。
確定以上兩點后,開始調整循環(huán),這是一系列重復的受控性能試驗。重復圖1所示的四個調整循環(huán)階段,直至獲得在開始調整過程前建立的系統(tǒng)性能目標。
二、測試階段
測試階段是調整循環(huán)操作的起點,此階段是根據(jù)測試的要求進行相關操作,為下一步結果統(tǒng)計提供相應的測試數(shù)據(jù)。此階段需要注意測試環(huán)境配置、測試用例的操作兩個要點。
1.測試環(huán)境配置
不同的測試環(huán)境會產(chǎn)生不同的測試結果,因此測試前需要對環(huán)境配置進行詳細的檢查。
(1)檢查網(wǎng)絡連通性。網(wǎng)絡暢通是測試能夠正常進行的基本前提。
(2)檢查流量模型是否超出系統(tǒng)負荷。如果將要加的壓力大大超出系統(tǒng)的負荷,會對系統(tǒng)產(chǎn)生傷害,并可能在測試過程中出現(xiàn)宕機、告警等異常情況。
(3)檢查被測系統(tǒng)的系統(tǒng)配置。此系統(tǒng)配置包括軟件版本和硬件配置兩個方面,不同的系統(tǒng)配置會產(chǎn)生不同的測試結果,故測試之前應對被測系統(tǒng)的配置進行嚴格核對,檢查是否是測試所需的系統(tǒng)配置。
(4)檢查測試工具的參數(shù)配置。在性能測試中,必須利用測試工具來模擬大業(yè)務量。對于一個功能相對完善的測試工具,不但能模擬大業(yè)務量,而且還能夠配置壓力遞增方式、壓力大小、壓力持續(xù)時間等參數(shù)。在測試之前需要根據(jù)測試的需求檢查相應參數(shù)配置是否滿足測試要求。
2.測試用例操作
測試過程中,性能測試主要按照測試用例規(guī)定的內容去逐步操作。一般來講性能測試用例內容大體分成測試環(huán)境配置、預置條件、測試步驟、預期結果、判定原則、測試結果六個方面。
環(huán)境配置是指按照測試的需求配置測試環(huán)境,包括網(wǎng)絡的組網(wǎng)、系統(tǒng)的參數(shù)配置等;測試預置條件是指為了真實模擬一些場景,需要在測試之前在系統(tǒng)中預置一些條件,例如在郵箱系統(tǒng)的性能測試過程中,為了模擬業(yè)務開展的實際情況測試,需要在郵件系統(tǒng)中預先存儲一些積壓的郵件;測試步驟是指在環(huán)境配置完成及預置條件完成后,如何對系統(tǒng)加壓的過程,一般而言,首先確定壓力的生成形式(如階梯型遞增、二次曲線形式遞增等),然后確定壓力遞增的時間,最后要求壓力保持的時間;預期結果是指通過理論及經(jīng)驗分析,對實際測試結果的一個預期指標,此內容是檢驗測試結果的一個依據(jù);判定原則是制定出一個標準來判斷測試是否滿足要求,此原則的制定很大程度上依據(jù)測試的預期結果;測試結果是根據(jù)實際測試情況及參考預期結果和判定原則對測試的一個總體結論,其結論包括此項測試是否通過及測試的相應指標記錄兩個方面。
3.結果統(tǒng)計
此過程是調整循環(huán)內容中一個承上啟下的環(huán)節(jié)。此環(huán)節(jié)統(tǒng)計的數(shù)據(jù)來源于上一次的測試結果,并為下一步的數(shù)據(jù)分析提供相關數(shù)據(jù)。
結果的統(tǒng)計可以來源于被測系統(tǒng)和測試工具本身兩個方面,在統(tǒng)計過程中不但要考慮到從被測系統(tǒng)中統(tǒng)計數(shù)據(jù)還要兼顧到測試工具本身的數(shù)據(jù)統(tǒng)計。一般來講,從被測系統(tǒng)可以直接通過系統(tǒng)的日志統(tǒng)計出系統(tǒng)資源消耗(如CPU、內存的占用率等);從測試工具本身可以統(tǒng)計出壓力的大小、業(yè)務處理時延、業(yè)務處理成功率等指標。結果統(tǒng)計階段需要將以上兩個方面的數(shù)據(jù)一并統(tǒng)計出來,為下一步數(shù)據(jù)分析提供重要依據(jù)。
4.結果分析
通過數(shù)據(jù)統(tǒng)計收集到系統(tǒng)所需的性能數(shù)據(jù)后,對這些數(shù)據(jù)進行分析以確定系統(tǒng)瓶頸。在這里,需要明確的是統(tǒng)計到的體現(xiàn)性能數(shù)據(jù)僅具有指示性,它并不一定就可以確定實際的瓶頸在哪里,因為一個性能問題可能由多個原因所致。因此,在結果分析階段需要從系統(tǒng)的角度去分析并查找原因,千萬不能走入頭痛醫(yī)頭,腳痛醫(yī)腳的誤區(qū)。在結果分析階段應該注意到以下幾個方面。
(1)數(shù)據(jù)發(fā)現(xiàn)的敏感性,能夠主動發(fā)現(xiàn)一些貌似合理的數(shù)據(jù)問題。
(2)數(shù)據(jù)分析的系統(tǒng)性,能夠通過測試數(shù)據(jù)的表象,從系統(tǒng)的角度對數(shù)據(jù)進行分析,發(fā)現(xiàn)系統(tǒng)瓶頸。
(3)數(shù)據(jù)合理的疑問性,測試工作的目的就是要發(fā)現(xiàn)問題,優(yōu)化系統(tǒng),所以應該抱著對所有數(shù)據(jù)懷疑的態(tài)度去分析測試數(shù)據(jù),這樣才能做到不遺漏任何的可疑數(shù)據(jù)。
(4)結果分析的分步性,通過測試經(jīng)驗,對于測試結果分析可以分成六步進行,包括觀察、初步假設、預測、測試、控制和結論,結論由該過程積累的最佳證據(jù)集合所支持的假設組成。
三、總結
在循環(huán)調整的過程中,測試、結果統(tǒng)計、結果分析環(huán)節(jié)的最終目的是要對系統(tǒng)進行優(yōu)化。因此,系統(tǒng)優(yōu)化的依據(jù)直接來源于對測試結果的分析。通常來講,對于一個比較成熟的系統(tǒng),系統(tǒng)的絕大多數(shù)優(yōu)化工作往往是對系統(tǒng)配置的優(yōu)化,只有少部分的優(yōu)化工作是對系統(tǒng)設計的修改。
通過對結果的分析,可以大體定位出系統(tǒng)問題出現(xiàn)在哪里,隨后對系統(tǒng)配置進行
更改及優(yōu)化。此優(yōu)化過程大部分的工作是嘗試性和不間斷性的,需要不斷嘗試配置參數(shù)的改變,然后驗證此配置的修改是否達到預期目的。如果沒有達到預期目的,需要進一步對配置進行修改和驗證。根據(jù)以往的測試經(jīng)驗,實現(xiàn)參數(shù)配置更改的最重要規(guī)則是一次僅實現(xiàn)一個配置更改。這主要是由于系統(tǒng)某一個模塊/單元出現(xiàn)問題可能是由多個模塊/單元的瓶頸導致的。因此,分別處理每個問題很重要。如果同時進行多個更改,將不可能準確地評定每次更改的影響。
實現(xiàn)了配置更改后,必須對修改后的系統(tǒng)進行測試,確定更改對系統(tǒng)所產(chǎn)生的影響。如果幸運,性能提高到預期的水平,這時便可以退出。如果不是這樣,則必須重新逐步進行調整循環(huán)。
綜合考慮以上的內容,一個調整循環(huán)的流程才算基本完成,根據(jù)調整的結果來考慮是否進入下一部調整循環(huán)的階段。