□ 許瀟湘 江蘇聯(lián)宏自動化系統(tǒng)工程有限公司
小議計算機軟件性能測試與監(jiān)控
□ 許瀟湘江蘇聯(lián)宏自動化系統(tǒng)工程有限公司
通常驗證軟件的性能在正常環(huán)境和系統(tǒng)條件下重復使用是否還能滿足性能指標。軟件測試作為保障軟件質(zhì)量最有效的手段之一,現(xiàn)今已成為了研究熱點。隨著軟件規(guī)模的不斷增大,復雜度越來越大,與其他系統(tǒng)的接口不斷增多,應用越來越廣泛,集成度越來越高,軟件測試這一環(huán)節(jié)必須得到重視,只有這樣,才能盡早的發(fā)現(xiàn)并解決錯誤。本文重點從軟件性能測試的方法與監(jiān)控關鍵指標的分析著手,集中從資源指標與系統(tǒng)指標兩方面進行闡述。
軟件;軟件測試;指標分析
計算機領域,性能測試(performance testing)就是用來測試軟件在集成系統(tǒng)中的運行性能。其目的是為了度量系統(tǒng)相對于預定義目標的差距。軟件性能測試是在交替進行負荷和強迫測試時常用的術語。軟件性能測試一般包括負載測試和軟件壓力測試。性能測試必須有工具支持,市面上有一些專門用于GUI或是web性能測試的工具,如:Loadrunner,Sil kperformance,Webload;性能測試收集的信息包括:CPU使用率、IO使用情況、內(nèi)存使用情況、系統(tǒng)反應時間等。
主要有:(1)評價系統(tǒng)當前性能,判斷系統(tǒng)是否滿足預期的性能需求。(2)尋找軟件系統(tǒng)可能存在的性能問題,定位性能瓶頸并解決問題。(3)判定軟件系統(tǒng)的性能表現(xiàn),預見系統(tǒng)負載壓力承受力,在應用部署之前,評估系統(tǒng)性能。
3.1負載測試
負載測試指的是最常見的驗證一般性能需求而進行的性能測試,在上面我們提到了用戶最常見的性能需求就是“既要馬兒跑,又要馬兒少吃草”。因此負載測試主要是考察軟件系統(tǒng)在既定負載下的性能表現(xiàn)。對負載測試的理解有:(1)負載測試是站在用戶的角度去觀察在一定條件下軟件系統(tǒng)的性能表現(xiàn)。(2)負載測試的預期結果是用戶的性能需求得到滿足。此指標一般體現(xiàn)為響應時間、交易容量、并發(fā)容量、資源使用率等。
3.2壓力測試
壓力測試是為了考察系統(tǒng)在極端條件下的表現(xiàn),極端條件可以是超負荷的交易量和并發(fā)用戶數(shù)。注意,這個極端條件并不一定是用戶的性能需求,可能要遠遠高于用戶的性能需求。可以這樣理解,壓力測試和負載測試不同的是,壓力測試的預期結果就是系統(tǒng)出現(xiàn)問題,而我們要考察的是系統(tǒng)處理問題的方式。比如說,我們期待一個系統(tǒng)在面臨壓力的情況下能夠保持穩(wěn)定,處理速度可以變慢,但不能系統(tǒng)崩潰。因此,壓力測試是能讓我們識別系統(tǒng)的弱點和在極限負載下程序將如何運行。
3.3并發(fā)測試
是驗證系統(tǒng)的并發(fā)處理能力。一般是和服務器端建立大量的并發(fā)連接,通過客戶端的響應時間和服務器端的性能監(jiān)測情況來判斷系統(tǒng)是否達到了既定的并發(fā)能力指標。負載測試往往就會使用并發(fā)來創(chuàng)造負載,之所以把并發(fā)測試單獨提出來,是因為并發(fā)測試往往涉及服務器的并發(fā)容量,以及多進程/多線程協(xié)調(diào)同步可能帶來的問題。這是要特別注意,必須測試的。
3.4基準測試
當軟件系統(tǒng)中增加一個新的模塊的時候,需要做基準測試,以判斷新模塊對整個軟件系統(tǒng)的性能影響。按照基準測試的方法,需要打開/關閉新模塊至少各做一次測試。關閉模塊之前的系統(tǒng)各個性能指標記下來作為基準(Benchmark),然后與打開模塊狀態(tài)下的系統(tǒng)性能指標作比較,以判斷模塊對系統(tǒng)性能的影響。
3.5穩(wěn)定性測試
“路遙知馬力”,在這里我們要說的是和性能測試有關的穩(wěn)定性測試,即測試系統(tǒng)在一定負載下運行長時間后是否會發(fā)生問題。軟件系統(tǒng)的有些問題是不能一下子就暴露出來的,或者說是需要時間積累才能達到能夠度量的程度。為什么會需要這樣的測試呢?因為有些軟件的問題只有在運行一天或一個星期甚至更長的時間才會暴露。這種問題一般是程序占用資源卻不能及時釋放而引起的。比如,內(nèi)存泄漏問題就是經(jīng)過一段時間積累才會慢慢變得顯著,在運行初期卻很難檢測出來;還有客戶端和服務器在負載運行一段時間后,建立了大量的連接通路,卻不能有效地復用或及時釋放。
3.6可恢復測試
測試系統(tǒng)能否快速地從錯誤狀態(tài)中恢復到正常狀態(tài)。比如,在一個配有負載均衡的系統(tǒng)中,主機承受了壓力無法正常工作后,備份機是否能夠快速地接管負載。可恢復測試通常結合壓力測試一起來做。
4.1資源指標分析
4.1.1判斷CPU是否是瓶頸的方法
一般情況下CPU滿負荷工作,有時候并不能判定為CPU出現(xiàn)瓶頸,比如Linux總是試圖要CPU盡可能的繁忙,使得任務的吞吐量最大化,即CPU盡可能最大化使用。因此,一般判斷CPU為瓶頸,主要從兩方面:一是CPU空閑持續(xù)為0,二是運行隊列大于CPU核數(shù)(經(jīng)驗值3-4倍),即可判定存在瓶頸,對于CPU高消耗主要由什么引起的,可能是應用程序不合理造成,也可能是硬件資源不足,需要具體問題具體分析,比如問題SQL語句引起,則需要跟蹤并優(yōu)化引起CPU使用過高的SQL語句。
4.1.2判斷內(nèi)存是否是瓶頸的方法
一般至少有10%可用內(nèi)存,內(nèi)存使用率可接受上限為85%。當空閑內(nèi)存變小時,系統(tǒng)開始頻繁地調(diào)動磁盤頁面文件,空閑內(nèi)存過小可能是內(nèi)存不足或內(nèi)存泄漏引起,需要根據(jù)系統(tǒng)實際情況監(jiān)控分析。
4.1.3判斷磁盤I/O是否是瓶頸的方法
磁盤I/O對于數(shù)據(jù)庫服務器、文件服務器、流媒體服務器系統(tǒng)來說,更容易成為瓶頸,一般從以下幾個方面對磁盤I/O進行分析判斷:
(1)計算每磁盤I/O數(shù)
每磁盤I/O數(shù)可用來與磁盤的I/O能力進行對比,如果經(jīng)過計算得到的每磁盤I/O數(shù)超過了磁盤標稱的I/O能力,則說明確實存在磁盤的性能瓶頸,每磁盤I/O計算方法如下表:
(2)監(jiān)控磁盤讀寫
如果磁盤長時間進行大數(shù)據(jù)量讀寫操作,且cpu等待超過20%,則說明磁盤I/O存在問題,考慮提高磁盤I/O讀寫性能。
4.1.4判斷網(wǎng)絡帶寬是否是瓶頸的方法
判斷網(wǎng)絡帶寬是否是系統(tǒng)運行性能瓶頸的首要條件是網(wǎng)絡帶寬是否會影響系統(tǒng)交易執(zhí)行性能。例如:減小網(wǎng)絡帶寬,并發(fā)用戶數(shù)、響應時間與事務通過率等性能指標是否不能接受;或者增加網(wǎng)絡帶寬,并發(fā)用戶數(shù)、響應時間與事務通過率等性能指標會得到明顯提高
在實際性能測試中,如果發(fā)現(xiàn)始終報連接超時,而實際手工訪問可以正常訪問,可以通過ping應用服務器IP或網(wǎng)關IP,如果出現(xiàn) 網(wǎng)絡嚴重延遲或丟包,則說明網(wǎng)絡不穩(wěn)定,需要檢查網(wǎng)絡。
通過對資源指標四個指標的分析,實際上各個方面都是互相依賴的,不能孤立的單從某個方面進行排查。當一個方面出現(xiàn)性能問題時,往往會引發(fā)其他方面的性能問題,例如,大量的磁盤讀寫勢必消耗CPU和IO資源,而內(nèi)存的不足會導致頻繁地進行內(nèi)存頁寫入磁盤、磁盤寫到內(nèi)存的操作,造成磁盤IO瓶頸,同時,大量的網(wǎng)絡流量也會造成CPU過載,所以,在分析性能問題時,需要從各個方面進行考慮。
4.2系統(tǒng)指標分析
4.2.1并發(fā)用戶數(shù)
系統(tǒng)能夠支持的用戶數(shù)是系統(tǒng)容量的重要標志,并發(fā)用戶數(shù)用于度量系統(tǒng)在高并發(fā)量訪問下,系統(tǒng)的并行處理能力,一般如果系統(tǒng)中存在死鎖、資源爭用,在并發(fā)訪問下,由于請求處于隊列等待中,系統(tǒng)響應就會隨著時間變慢。
一般情況下,選用高吞吐量、高數(shù)據(jù)庫I/O、高商業(yè)風險的業(yè)務功能進行并發(fā)用戶訪問測試。
判斷系統(tǒng)能夠承受的最大并發(fā)用戶數(shù),通常以滿足以下條件為準:(1)業(yè)務功能操作平均響應時間在合理范圍之內(nèi);(2)事務成功率在合理范圍之內(nèi);(3)系統(tǒng)運行無故障(無異常宕機);(4)系統(tǒng)資源指標使用在合理范圍內(nèi)。
4.2.2平均響應時間
對于客戶端用戶來說,最直觀的體驗就是訪問該頁面快或者慢,即響應時間的長短。比如在持續(xù)并發(fā)性能測試過程中,客戶感知訪問應用很慢,監(jiān)控到的平均響應時間也逐漸變長,這時就需要先借助于監(jiān)控到的資源指標,首先排除資源方面的限制因素,再從應用本身進行定位,如可以采用頁面細分工具(如httpwatch、Loadrunner Anaysis中的頁面組件細分)分析響應比較慢的頁面。
4.2.3事務成功率、超時出錯率
事務成功率越高,則表明系統(tǒng)處理能力越大;而失敗事務主要由于系統(tǒng)響應慢,導致訪問業(yè)務功能超時,或者系統(tǒng)業(yè)務功能異常,不能正常訪問等,需要根據(jù)事務錯誤提示信息,具體分析。
主要是:(1)軟件性能測試計劃、方案一般與測試用例統(tǒng)一在一個文檔里。(2)測試環(huán)境應盡量與用戶環(huán)境保持一致。(3)軟件性能測試一般使用測試工具和測試人員編制測試腳本來完成,軟件性能測試的環(huán)境應單獨運行盡量避免與其他軟件同時使用。(4)軟件性能測試的重點在于前期數(shù)據(jù)的設計與后期數(shù)據(jù)的分析。(5)軟件性能測試的用例主要涉及到整個系統(tǒng)架構的問題,所以測試用例一旦生成,改動一般不大,所以做軟件性能測試的重復使用率一般比較高。(說明:當系統(tǒng)中出現(xiàn)的某個功能點需要修改,它一般只會影響到功能測試的設計用例,而對于軟件性能測試,很少影響到軟件性能測試的設計用例。但是如果某個功能有較大的修改,軟件性能測試也應該進行重新測試。)
綜上所述,軟件性能測試是執(zhí)行、監(jiān)控—〉分析—〉調(diào)優(yōu)不斷進行的過程,即監(jiān)控是為分析提供更多的參考數(shù)據(jù),分析是為了進行調(diào)優(yōu),調(diào)優(yōu)是解決當前系統(tǒng)存在的性能瓶頸,為用戶提供更好、更快的客戶體驗。由于分析、調(diào)優(yōu)需要根據(jù)具體問題進行具體分析,本文未做過多說明,只對通用的關鍵指標進行監(jiān)控分析,建議在實際工作中可從資源指標與系統(tǒng)指標兩個方面,層層檢測、步步排查,性能問題就無處藏身,一旦找到出現(xiàn)問題的原因,性能問題也就迎刃而解!總之,軟件測試作為保障軟件質(zhì)量最有效的手段之一,現(xiàn)今已成為了研究熱點。隨著軟件規(guī)模的不斷增大,復雜度越來越大,與其他系統(tǒng)的接口不斷增多,應用越來越廣泛,集成度越來越高,軟件測試這一環(huán)節(jié)必須得到重視,只有這樣,才能盡早的發(fā)現(xiàn)并解決錯誤,提高效益、品質(zhì)。