您當(dāng)前的位置:檢測資訊 > 科研開發(fā)
嘉峪檢測網(wǎng) 2022-07-06 23:31
通過軟件性能測試可以測算出當(dāng)前系統(tǒng)可以承載的負(fù)荷,保證系統(tǒng)在實(shí)際的壓力下正常工作。本文主要闡述了軟件性能測試的分類和衡量指標(biāo),并提出了分析和調(diào)優(yōu)的方法,最后羅列了一些常見的性能瓶頸和產(chǎn)生原因。
一、軟件性能測試的分類
軟件性能測試是系統(tǒng)測試的一種,在軟件質(zhì)量模型中,軟件性能測試是屬于效率這一類的。對(duì)軟件的性能進(jìn)行衡量,需要考慮軟件效率的時(shí)間特性、資源利用率及效率依從性。
時(shí)間特性是指在特定的軟硬件條件下,軟件產(chǎn)品在運(yùn)行功能時(shí)需要滿足的系統(tǒng)響應(yīng)時(shí)間及吞吐率能力。
資源利用率是指軟件產(chǎn)品在執(zhí)行功能時(shí)需要滿足合適的數(shù)量和類別的軟硬件資源的能力。
效率依從性是指軟件產(chǎn)品遵循與效率相關(guān)的標(biāo)準(zhǔn)或約定的能力。
軟件性能測試的目的是驗(yàn)證軟件系統(tǒng)的各種性能指標(biāo)是否滿足用戶需求及根據(jù)測試結(jié)果對(duì)系統(tǒng)中可能存在的性能瓶頸進(jìn)行分析和優(yōu)化。主要包括以下幾個(gè)方面:
1、對(duì)系統(tǒng)的負(fù)載能力進(jìn)行評(píng)估。根據(jù)測試數(shù)據(jù),可以對(duì)系統(tǒng)的內(nèi)存、進(jìn)程、磁盤、網(wǎng)絡(luò)等負(fù)載能力進(jìn)行評(píng)估,并根據(jù)評(píng)估結(jié)果分析定位性能瓶頸,為性能的優(yōu)化提供決策依據(jù)。
2、識(shí)別系統(tǒng)弱點(diǎn)。大量的負(fù)載可以評(píng)估系統(tǒng)在極端情況下的性能狀況,找到系統(tǒng)的薄弱點(diǎn)并進(jìn)行修復(fù)。
3、系統(tǒng)調(diào)優(yōu)。通過反復(fù)運(yùn)行測試,對(duì)系統(tǒng)性能優(yōu)化后的結(jié)果進(jìn)行驗(yàn)證,檢查其是否達(dá)到了預(yù)期的結(jié)果。同時(shí),長時(shí)間運(yùn)行測試,可能會(huì)導(dǎo)致內(nèi)存泄漏、系統(tǒng)崩潰等問題的發(fā)生,揭示程序中隱含的問題或沖突。
4、驗(yàn)證系統(tǒng)的可靠性、穩(wěn)定性。在特定的負(fù)載情況下,長時(shí)間運(yùn)行測試可以對(duì)系統(tǒng)的可靠性和穩(wěn)定性進(jìn)行驗(yàn)證。
對(duì)一個(gè)軟件系統(tǒng)而言,性能主要包括軟件的資源占用率,系統(tǒng)的穩(wěn)定性、可靠性等。本文中提到的軟件性能測試主要是通過自動(dòng)化測試工具Performance Center模擬測試業(yè)務(wù)時(shí)正常、異常及峰值負(fù)載條件來對(duì)比模塊的各項(xiàng)性能指標(biāo)進(jìn)行測試。
軟件性能測試的方法很多,本文主要介紹以下4種類別的測試。
1、負(fù)載測試(Load Testing)。指在不同的軟硬件及網(wǎng)絡(luò)環(huán)境下,運(yùn)行一種或多種業(yè)務(wù),通過對(duì)系統(tǒng)逐步增加負(fù)載的方式,對(duì)系統(tǒng)性能的變化進(jìn)行測試,并確定系統(tǒng)在滿足各項(xiàng)性能指標(biāo)的情況下,所能承受的各項(xiàng)閥值。
2、基準(zhǔn)測試(Benchmark Testing)。指模擬一定數(shù)量的虛擬用戶行為,在系統(tǒng)測評(píng)或調(diào)優(yōu)過程中,根據(jù)測試出的基準(zhǔn)數(shù)據(jù)運(yùn)行相同的業(yè)務(wù)場景并對(duì)測試結(jié)果進(jìn)行分析比較,以確定測試結(jié)果是否能對(duì)系統(tǒng)調(diào)優(yōu)提供決策數(shù)據(jù)或?qū)ο到y(tǒng)性能的改善提供幫助。
3、壓力測試(Stress Testing)。指通過逐漸增加系統(tǒng)負(fù)載,確定在什么負(fù)載條件下系統(tǒng)性能處于失效狀態(tài),從而獲得系統(tǒng)所能承受的最大壓力數(shù)據(jù),并根據(jù)測試數(shù)據(jù)對(duì)系統(tǒng)的壓力瓶頸進(jìn)行定位及調(diào)優(yōu)。壓力測試更強(qiáng)調(diào)在極端情況下系統(tǒng)的可靠性及健壯性。
4 、并發(fā)測試(Concurrency Testing)。主要用來測試系統(tǒng)是否存在死鎖、數(shù)據(jù)錯(cuò)誤及在并發(fā)用戶量大的情況下系統(tǒng)是否會(huì)出現(xiàn)頁面滯后、系統(tǒng)崩潰等故障。并發(fā)測試是軟件性能測試中最常用的測試方法,為了避免函數(shù)方法或數(shù)據(jù)庫等在并發(fā)下的錯(cuò)誤,需要專門針對(duì)每個(gè)模塊進(jìn)行并發(fā)測試。
二、軟件性能的衡量指標(biāo)
對(duì)于一個(gè)應(yīng)用系統(tǒng)來說,還需要對(duì)性能指標(biāo)進(jìn)行監(jiān)控。衡量一個(gè)軟件系統(tǒng)性能的常見指標(biāo)有:
1、響應(yīng)時(shí)間(Response time)。對(duì)于網(wǎng)站系統(tǒng)來說,響應(yīng)時(shí)間就是從點(diǎn)擊了一個(gè)頁面計(jì)時(shí)開始,到這個(gè)頁面完全在瀏覽器里展現(xiàn)計(jì)時(shí)結(jié)束的這一段時(shí)間間隔,響應(yīng)時(shí)間越短越好。可以細(xì)分為服務(wù)器端響應(yīng)時(shí)間、網(wǎng)絡(luò)響應(yīng)時(shí)間、客戶端響應(yīng)時(shí)間。響應(yīng)時(shí)間描述如下圖所示。
在軟件性能測試中一般是通過事務(wù)函數(shù)Transaction Response Time來統(tǒng)計(jì)響應(yīng)時(shí)間。
2、吞吐量(Throughput)。吞吐量反映的是系統(tǒng)的處理能力,具體來說,就是指軟件系統(tǒng)在每單位時(shí)間內(nèi)能處理多少個(gè)事務(wù)/請求/單位數(shù)據(jù)等。吞吐量的大小由負(fù)載或行為方式來決定。在Performance Center中,吞吐量反映單位時(shí)間內(nèi)系統(tǒng)處理的事務(wù)數(shù)目。一般以TPS(Transaction Per Second)即每秒事務(wù)數(shù)表示。
3、資源使用率(Resource utilization)。指系統(tǒng)在負(fù)載情況下軟硬件上各種資源的占用情況。例如,CPU占用率、內(nèi)存使用率、磁盤I/O等。
4、并發(fā)用戶數(shù)(Concurrent users)。并發(fā)用戶數(shù)用來度量多個(gè)用戶同時(shí)訪問同一個(gè)應(yīng)用、同一個(gè)模塊或者數(shù)據(jù)記錄時(shí)是否存在死鎖或者其他性能問題,反映了系統(tǒng)的并發(fā)處理能力。
5、點(diǎn)擊數(shù)(Hits per second)。點(diǎn)擊數(shù)是按照客戶端向Web Server 發(fā)起了多少次 HTTP請求計(jì)算的。
三、性能分析及調(diào)優(yōu)原理
軟件性能測試的目的是評(píng)估當(dāng)前系統(tǒng)性能指標(biāo),根據(jù)測試結(jié)果對(duì)性能瓶頸進(jìn)行定位及優(yōu)化,以預(yù)防規(guī)避性能風(fēng)險(xiǎn)。在進(jìn)行系統(tǒng)的調(diào)優(yōu)過程中,好的策略是按照由易到難的順序?qū)ο到y(tǒng)性能進(jìn)行調(diào)優(yōu)。
性能分析主要是根據(jù)測試結(jié)果對(duì)可能導(dǎo)致性能瓶頸的原因進(jìn)行定位,而調(diào)優(yōu)則是解決發(fā)現(xiàn)的性能瓶頸??梢酝ㄟ^以下兩種方法來對(duì)性能進(jìn)行調(diào)優(yōu):
(一)性能分析法
1、指標(biāo)達(dá)成法。指根據(jù)用戶需求,將得出的測試結(jié)果與之進(jìn)行比較,如果能夠滿足用戶需求則測試通過。如果不滿足,則對(duì)測試數(shù)據(jù)進(jìn)行分析定位,并解決查找出的性能問題,直到系統(tǒng)性能在用戶可接受的范圍內(nèi)。
2、最優(yōu)化分析法。指根據(jù)測試數(shù)據(jù),對(duì)性能瓶頸進(jìn)行分析及優(yōu)化,以使系統(tǒng)資源得到充分利用,使系統(tǒng)的處理能力最大化。
性能調(diào)優(yōu)方向如下圖所示:
1)應(yīng)用程序診斷。通過模擬大量用戶的操作對(duì)系統(tǒng)形成負(fù)載,根據(jù)測試結(jié)果對(duì)應(yīng)用程序進(jìn)行檢驗(yàn),看其是否能夠滿足用戶的性能需求。如果滿足需求則測試通過。反之,則對(duì)測試數(shù)據(jù)進(jìn)行分析定位并找出解決瓶頸的方案,以保證系統(tǒng)的可靠性、穩(wěn)定性。
2)系統(tǒng)調(diào)優(yōu)。主要包括對(duì)獨(dú)立的瓶頸進(jìn)行調(diào)優(yōu)及對(duì)軟硬件迭代調(diào)優(yōu)。在測試過程中,模擬大量用戶形成負(fù)載,并且對(duì)系統(tǒng)的軟硬件環(huán)境進(jìn)行迭代測試,根據(jù)測試結(jié)果找出影響性能的要素,對(duì)其進(jìn)行優(yōu)化后最終提升系統(tǒng)的性能。對(duì)系統(tǒng)軟硬件進(jìn)行迭代調(diào)優(yōu)是一個(gè)循序漸進(jìn)的過程。
(二)調(diào)優(yōu)的基本步驟
對(duì)系統(tǒng)進(jìn)行分析及調(diào)優(yōu)的步驟主要包括:
1、確定詳細(xì)的軟件性能測試計(jì)劃、方案和目標(biāo),并按優(yōu)先級(jí)排列;
2、利用合適的軟件性能測試工具執(zhí)行測試,并對(duì)測試結(jié)果進(jìn)行分析和整合;
3、拆分分布式系統(tǒng)的各個(gè)組件,如Web層、業(yè)務(wù)層、集成層、網(wǎng)絡(luò)層等,分別進(jìn)行調(diào)優(yōu);
4、按照軟件性能測試-> 定位瓶頸 -> 性能調(diào)優(yōu) -> 再次執(zhí)行測試的方法對(duì)系統(tǒng)進(jìn)行逐步調(diào)優(yōu);
5、確定影響系統(tǒng)性能的主要因素:CPU、Memory、Process還是I/O;
6、找出主要的性能瓶頸,首先處理最容易的瓶頸問題,再重復(fù)測試;
7、提高 CPU的性能:例如更優(yōu)化的算法、更高效率的代碼、優(yōu)化的SQL 等,以減少短期生存的對(duì)象;
8、提高內(nèi)存性能:主要是減少長期生存的對(duì)象;
9、提高I/O性能:重新對(duì)應(yīng)用進(jìn)行設(shè)計(jì),減少輸入輸出的交互;
10、性能優(yōu)化完成之后,進(jìn)行 QA 測試;
11、在代碼中對(duì)優(yōu)化的地方進(jìn)行記錄,并對(duì)舊代碼進(jìn)行注釋。
四、常見的性能瓶頸
(一)硬件上的性能瓶頸
主要指RAM、CPU方面的瓶頸。分為服務(wù)器操作系統(tǒng)瓶頸;Web服務(wù)器、數(shù)據(jù)庫等中間件瓶頸;服務(wù)器硬件瓶頸;數(shù)據(jù)庫設(shè)計(jì)、算法、業(yè)務(wù)邏輯、SQL語句等的應(yīng)用瓶頸及網(wǎng)絡(luò)瓶頸。例如,在測試過程中發(fā)現(xiàn)數(shù)據(jù)庫服務(wù)器CPU的持續(xù)利用率超過90%以上,此數(shù)據(jù)庫服務(wù)器需要5個(gè)CPU、10GB 內(nèi)存,這時(shí)可以認(rèn)為系統(tǒng)出現(xiàn)了硬件上的性能瓶頸。
(二)應(yīng)用軟件上的性能瓶頸
一般指的是應(yīng)用服務(wù)器、Web服務(wù)器等應(yīng)用軟件,還包括數(shù)據(jù)庫系統(tǒng)。例如,在Weblogic平臺(tái)上配置了JDBC連接池的參數(shù),最大連接數(shù)為50,最小連接數(shù)為5,增加量為10。在測試時(shí)發(fā)現(xiàn),當(dāng)負(fù)載增加時(shí),現(xiàn)有的連接數(shù)不足,系統(tǒng)會(huì)動(dòng)態(tài)生成10個(gè)新的連接,導(dǎo)致交易處理的響應(yīng)時(shí)間大大增加。這時(shí)可以認(rèn)為在應(yīng)用軟件上出現(xiàn)了性能瓶頸。
除此之外,還包括應(yīng)用程序上的性能瓶頸、操作系統(tǒng)上的性能瓶頸、網(wǎng)絡(luò)設(shè)備上的性能瓶頸等。
五、常見性能問題及成因
(一)常見的性能問題有以下幾個(gè)特征
1、隨著時(shí)間推移越來越慢。在負(fù)載不變的情況下,隨著時(shí)間的推移,系統(tǒng)可能由于緩存中數(shù)據(jù)量大或者達(dá)到某個(gè)閾值,導(dǎo)致頁面滯后,系統(tǒng)被鎖定或出現(xiàn)大量錯(cuò)誤而崩潰。
2、隨著負(fù)載增加越來越慢。在負(fù)載增加的情況下,每增加若干用戶,系統(tǒng)響應(yīng)時(shí)間慢,在用戶較少的情況下,系統(tǒng)響應(yīng)時(shí)間相對(duì)較快。
3、鎖定。在系統(tǒng)出現(xiàn)掛起或錯(cuò)誤的情況下加速出現(xiàn)鎖定,直到系統(tǒng)完全鎖定。通常需要重啟系統(tǒng)才能解決。
4、突然混亂。系統(tǒng)運(yùn)行一直都較為正常,在持續(xù)運(yùn)行或者負(fù)載量較大的情況下,系統(tǒng)突然出現(xiàn)大量錯(cuò)誤或鎖定。
(二)常見性能問題及成因
1、資源泄漏。主要是CICS 事務(wù)網(wǎng)關(guān)連接、JDBC語句等泄露導(dǎo)致了橋接層及對(duì)后端系統(tǒng)產(chǎn)生了影響。并隨著時(shí)間的推移,出現(xiàn)鎖定或系統(tǒng)崩潰等問題。
成因:遺漏了finally塊,沒有用close()關(guān)閉外部資源的對(duì)象。
2、內(nèi)存泄露。分為線性內(nèi)存泄漏和指數(shù)方式內(nèi)存泄漏。內(nèi)存泄露會(huì)隨著時(shí)間推移及負(fù)載增多而增加系統(tǒng)內(nèi)存消耗降低系統(tǒng)性能。
成因:原因較多,主要與資源泄露及向集合(Vector、HashMap)中加入不刪除的元素有關(guān)。
3、外部瓶頸問題。隨著負(fù)載的增加,后端運(yùn)行持續(xù)緩慢,減緩了應(yīng)用服務(wù)器及應(yīng)用程序的響應(yīng)時(shí)間,或者應(yīng)用程序通過大量請求濫用后端系統(tǒng)。
成因:后端系統(tǒng)不合理或者冗余的工作請求??梢酝ㄟ^咨詢專家、分解工作請求等方法解決。
4、線程阻塞、死鎖/活動(dòng)鎖。“獲得順序”的問題或線程遇到同步阻塞,隨著負(fù)載量的增加,系統(tǒng)會(huì)出現(xiàn)掛起、鎖定或異常錯(cuò)誤。
成因:鎖定策略及“獲得順序”的算法不合理。
5、中間層問題。數(shù)據(jù)庫連接池管理及JDBC驅(qū)動(dòng)程序橋接層不合理,隨著負(fù)載的增加系統(tǒng)持續(xù)緩慢。在早期階段很容易與外部瓶頸混淆。
成因:有可能是橋接層和外部系統(tǒng)的版本不兼容造成的。
6、內(nèi)部資源瓶頸。對(duì)象池、線程池等內(nèi)部資源稀缺,隨著負(fù)載的增加系統(tǒng)持續(xù)緩慢并且出現(xiàn)掛起或異常錯(cuò)誤。
成因:分配不足或過度使用??梢愿鶕?jù)預(yù)期的最大負(fù)載量,通過提高對(duì)象池、線程池的最大尺寸等方法解決。
軟件性能測試對(duì)于確保系統(tǒng)的正常運(yùn)行有著重要的意義。因此,分析和研究產(chǎn)生性能瓶頸的成因,有助于與我們更好的理解軟件性能測試,解決性能瓶頸問題,確保系統(tǒng)健康有序的運(yùn)行。

來源:Internet