孔留彥 劉 新 凌 朗
(廣東評(píng)測中心 廣東 510663)
網(wǎng)絡(luò)應(yīng)用系統(tǒng)使用越來越普遍,基本涉及到各行各業(yè),隨著網(wǎng)絡(luò)應(yīng)用系統(tǒng)使用的普及,網(wǎng)絡(luò)應(yīng)用系統(tǒng)逐漸呈顯以下特點(diǎn):
圖1 網(wǎng)絡(luò)應(yīng)用特點(diǎn)
網(wǎng)絡(luò)應(yīng)用系統(tǒng)性能常見性問題如下描述:
(1)系統(tǒng)響應(yīng)速度太慢,加載時(shí)間過長。
(2)每秒所完成的系統(tǒng)輸出/入低于預(yù)期,用戶量大時(shí)導(dǎo)致系統(tǒng)錯(cuò)誤。
(3)服務(wù)器系統(tǒng)資源(如CPU、內(nèi)存、硬盤或網(wǎng)絡(luò)等)長時(shí)間處于高位占用的狀態(tài)。
圖2 網(wǎng)絡(luò)應(yīng)用系統(tǒng)常見問題
根據(jù)網(wǎng)絡(luò)應(yīng)用系統(tǒng)應(yīng)用的現(xiàn)狀和特點(diǎn),針對(duì)網(wǎng)絡(luò)應(yīng)用系統(tǒng)的性能問題,明確用戶的性能需求,通過全面的性能測試進(jìn)行分析定位,采集相關(guān)的性能測試數(shù)據(jù),根據(jù)用戶的性能需求以及行業(yè)的一般性性能準(zhǔn)則要求對(duì)采集的數(shù)據(jù)進(jìn)行分析,并提出相應(yīng)的性能調(diào)優(yōu)建議,優(yōu)化系統(tǒng)性能,提升用戶的應(yīng)用體驗(yàn)效果。
圖3 性能調(diào)優(yōu)流程圖
性能測試可以由淺入深按照層次對(duì)系統(tǒng)進(jìn)行測試,既能清晰定位性能瓶頸,又能提高測試的效率。
常規(guī)可根據(jù)測試目標(biāo)、歷史數(shù)據(jù)分析、參考?xì)v史項(xiàng)目或其它同行業(yè)的項(xiàng)目和其他項(xiàng)目資料數(shù)據(jù)獲取相關(guān)測試信息,選擇測試方法。常見測試方法與對(duì)應(yīng)的測試目標(biāo)與策略如下:
(1)Load Testing 是指模擬真實(shí)的用戶核心業(yè)務(wù)模塊操作行為,通過不斷加壓直到性能出現(xiàn)瓶頸或資源達(dá)到飽和。負(fù)載測試是我們最經(jīng)常進(jìn)行的性能測試,用于測量系統(tǒng)的容量,發(fā)現(xiàn)系統(tǒng)瓶頸并配合性能調(diào)優(yōu)。
(2)測試策略:主要驗(yàn)證服務(wù)器在持續(xù)加壓過程中,各加壓點(diǎn)服務(wù)器健康狀況。目的是找出最佳并發(fā)點(diǎn)、最大并發(fā)點(diǎn)以及系統(tǒng)所能承受的最大性能瓶頸點(diǎn)。
(1)Stress Testing 是指測試系統(tǒng)在一定的飽和狀態(tài)下系統(tǒng)的處理能力。負(fù)載測試的不斷加壓到一定階段即是壓力測試,兩者沒有明確的界限。
那么“騎卒死亡者八九百人”事件的具體時(shí)間發(fā)生在何時(shí)?《朝鮮實(shí)錄》世宗十七年二月丙寅(1435年3月23日),咸吉道兵馬都節(jié)制使抄寫李滿住、凡察處皇帝敕書二道以送。其敕諭凡察曰:“爾差指揮使李張家等來奏,楊木答兀引領(lǐng)野人來廝殺情由,朕已具悉,先因指揮塔察兒來奏報(bào)前事,已敕內(nèi)官阮堯民、亦失哈、張童兒等前去整理,尚未回報(bào),且待其歸,具奏如何?”據(jù)此可以認(rèn)為,此事件發(fā)生在宣德十年(1435)初至二月丙寅之前,因?yàn)榇撕笕顖蛎袷苊俺r處理事務(wù)。而劉清此時(shí)還在船廠,直至四月被捕。
(2)測試策略:在負(fù)載測試數(shù)據(jù)基礎(chǔ)上,針對(duì)系統(tǒng)在特定數(shù)據(jù)量下負(fù)荷壓力進(jìn)行設(shè)計(jì)。主要驗(yàn)證處于性能轉(zhuǎn)折點(diǎn)時(shí),系統(tǒng)服務(wù)器的性能狀況。
(1)Reliability Testing 是指加載一定的業(yè)務(wù)壓力,同時(shí)讓此壓力持續(xù)運(yùn)行一段時(shí)間,測試系統(tǒng)是否可以穩(wěn)定運(yùn)行。
(2)測試策略:主要驗(yàn)證系統(tǒng)在一定壓力環(huán)境下,服務(wù)器所能承受的最大響應(yīng)時(shí)間是否滿足實(shí)際項(xiàng)目需要。
(1)Concurrency Testing 是模擬用戶并發(fā)訪問同一應(yīng)用程序中核心業(yè)務(wù)模塊的測試,核心業(yè)務(wù)模塊用于發(fā)現(xiàn)并發(fā)問題諸如內(nèi)存泄漏,線程鎖,資源爭用,數(shù)據(jù)庫死鎖。
(2)測試策略:基于負(fù)載測試的基礎(chǔ)上,針對(duì)測試曲線中較為平滑的部分設(shè)計(jì)測試案例。但要測試這類模塊的一些和性能相關(guān)的算法,還要測試這類模塊對(duì)并發(fā)用戶的響應(yīng)情況。
(1)Configuration Testing 驗(yàn)證各種配置對(duì)系統(tǒng)性能的影響,用于性能調(diào)優(yōu)和規(guī)劃能力。比如:JVM內(nèi)存堆值的配置,一般實(shí)際環(huán)境中512M~1G左右性能最佳、數(shù)據(jù)庫連接數(shù)設(shè)置等等。
(2)測試策略:通過對(duì)系統(tǒng)重大需求變更或?qū)Φ讓游募M(jìn)行大量修改后,驗(yàn)證系統(tǒng)在不同環(huán)境配置參數(shù)、不同數(shù)據(jù)量下的服務(wù)器性能狀況。
(1)Failover Testing 針對(duì)有冗余備份和負(fù)載均衡的系統(tǒng),用來檢驗(yàn)如果系統(tǒng)局部發(fā)生故障,用戶是否能夠繼續(xù)使用系統(tǒng);以及如果這種情況發(fā)生,用戶將受到多大程度的影響。
(2)測試策略:主要驗(yàn)證系統(tǒng)是否存在故障處理機(jī)制,已開發(fā)的功能是否滿足客戶實(shí)際需求。
(1)疲勞測試是采用系統(tǒng)穩(wěn)定運(yùn)行情況下能夠支持的最大并發(fā)用戶數(shù),持續(xù)執(zhí)行一段時(shí)間業(yè)務(wù),通過綜合分析交易執(zhí)行指標(biāo)和資源監(jiān)控指標(biāo)來確定系統(tǒng)處理最大工作量強(qiáng)度性能的過程。
(2)測試策略:以服務(wù)器能夠正常穩(wěn)定響應(yīng)請(qǐng)求的最大并發(fā)用戶數(shù)進(jìn)行一定時(shí)間的疲勞測試,獲取交易執(zhí)行指標(biāo)數(shù)據(jù)和系統(tǒng)資源監(jiān)控?cái)?shù)據(jù)。
(1)主要是針對(duì)對(duì)數(shù)據(jù)庫有特殊要求或業(yè)務(wù)中會(huì)產(chǎn)生大數(shù)據(jù)量的系統(tǒng)進(jìn)行的測試:
①實(shí)時(shí)大數(shù)據(jù)量;②極限狀態(tài)下的測試;③實(shí)時(shí)與極限結(jié)合;
(2)測試策略:可針對(duì)某些系統(tǒng)存儲(chǔ)、傳輸、統(tǒng)計(jì)、查詢等業(yè)務(wù)進(jìn)行大數(shù)據(jù)量的獨(dú)立數(shù)據(jù)量測試;或在測試用戶較多或者某些業(yè)務(wù)產(chǎn)生較大數(shù)據(jù)量時(shí)進(jìn)行壓力性能測試、負(fù)載性能測試、疲勞性能測試相結(jié)合的綜合數(shù)據(jù)量測試方案。從而獲取交易執(zhí)行指標(biāo)數(shù)據(jù)和系統(tǒng)資源監(jiān)控?cái)?shù)據(jù)。
以上測試方法可以發(fā)現(xiàn)及定位系統(tǒng)占用資源過高、系統(tǒng)報(bào)錯(cuò)、系統(tǒng)運(yùn)行不穩(wěn)定、業(yè)務(wù)操作失敗、數(shù)據(jù)丟失或錯(cuò)亂、文件丟失或錯(cuò)亂、系統(tǒng)無響應(yīng)等問題。
本某協(xié)同辦公系統(tǒng)具有用戶訪問量大、數(shù)據(jù)比較集中、業(yè)務(wù)處理復(fù)雜、統(tǒng)計(jì)分析內(nèi)容較多等相關(guān)特點(diǎn),客戶反饋用戶使用量比較大時(shí),經(jīng)常出現(xiàn)系統(tǒng)響應(yīng)速度太慢,加載時(shí)間過長,同時(shí)經(jīng)常出系統(tǒng)錯(cuò)誤提示信息,系統(tǒng)管理人員通過資源監(jiān)控發(fā)現(xiàn)應(yīng)用服務(wù)器的系統(tǒng)資源(如 CPU、內(nèi)存、硬盤或網(wǎng)絡(luò)等)長時(shí)間處于高位占用的狀態(tài)等。
第一、針對(duì)客戶反饋的問題,確定需要優(yōu)化的內(nèi)容第二、根據(jù)反饋的問題選擇相關(guān)業(yè)務(wù)指標(biāo)進(jìn)行測試。
第三、采用測試工具Httpwatch、LoadRunner分別模擬單個(gè)、多個(gè)用戶訪問系統(tǒng),查看系統(tǒng)在各個(gè)檢查點(diǎn)支持的并發(fā)用戶數(shù)和響應(yīng)時(shí)間;
第四、通過監(jiān)控工具對(duì)服務(wù)器的資源(CPU、內(nèi)存、網(wǎng)絡(luò)等)進(jìn)行監(jiān)控,查看系統(tǒng)在各個(gè)檢查點(diǎn)用戶并發(fā)訪問情況下服務(wù)器資源的使用情況,分析并優(yōu)化系統(tǒng)相關(guān)應(yīng)用環(huán)節(jié)。
根據(jù)測試方案的設(shè)計(jì),測試方法選擇壓力測試、疲勞強(qiáng)度測試,通過500用戶并發(fā)壓力測試以及8小時(shí)疲勞強(qiáng)度測試在特定數(shù)據(jù)量下負(fù)荷壓力驗(yàn)證處于性能轉(zhuǎn)折點(diǎn)時(shí),系統(tǒng)服務(wù)器的資源使用狀況,通過分析服務(wù)器的資源(CPU、內(nèi)存、網(wǎng)絡(luò)等)的使用情況,并優(yōu)化系統(tǒng)相關(guān)應(yīng)用環(huán)節(jié)以達(dá)到系統(tǒng)提供服務(wù)最優(yōu)狀態(tài)。
優(yōu)化過程中出現(xiàn)了,當(dāng)用戶并發(fā)數(shù)達(dá)到500時(shí),SQL語句及其索引或鎖定屬性不合理引發(fā)DISKIO過忙(磁盤讀、寫數(shù)據(jù))或者CPU使用過高,造成執(zhí)行時(shí)間過長,阻塞線程的執(zhí)行,最終引發(fā)系統(tǒng)掛起或者執(zhí)行超時(shí)引發(fā)系統(tǒng)掛機(jī),同時(shí) 502、503異常頻繁出現(xiàn)等問題。針對(duì)系統(tǒng)出現(xiàn)的問題采取了相關(guān)優(yōu)化手段,從而不至于請(qǐng)求很快被拒絕掉等措施。
通過本次性能測試,知道了本系統(tǒng)在不同壓力情況有不同表現(xiàn)情況,發(fā)現(xiàn)系統(tǒng)中有性能瓶頸的模塊。對(duì)系統(tǒng)進(jìn)行了多次調(diào)整優(yōu)化,系統(tǒng)的整體性能顯著提升,并運(yùn)行更加可靠。
[1]陳能技,郭柏雅.性能測試診斷分析與優(yōu)化,出版時(shí)間:2012-6-1
[2]于涌.精通軟件性能測試與LoadRunner實(shí)戰(zhàn),出版時(shí)間:2010-3-1
[3]段念.軟件性能測試過程詳解與案例剖析,出版時(shí)間:2006-8-1