視頻匯總地址:https://edu.51cto.com/lecturer/4626073.html
46.LR啟動controller報錯“transaction monitor not available”
1.多是OS系統(tǒng)問題,修復試試或升級
2.或修復LR試試
47.Loadrunnber 報錯誤:Error -- memory violation : Exception ACCESS_VIOLATION received.的一種情況
Posted on 2011-01-05 12:12蟈蟈俊 閱讀(433) 評論(0) 編輯收藏
最近寫的一個Loadrunner腳本,最后一步是點擊“退出”按鈕退出登錄狀態(tài),如下:
web_text_link("[退出]",
"Snapshot=t18.inf",
DESCRIPTION,
"Text=[退出]",
ACTION,
"UserAction=Click",
LAST);
return 0;
但是會報錯誤:
Action1.c(94): Error: C interpreter run time error: Action1.c (94): Error -- memory violation : Exception ACCESS_VIOLATION received.
Action1.c(94): Notify: CCI trace: Action1.c(94): web_text_link(0x02080870, 0x0208085f "Snapshot=t18.inf", 0x02080a42 "DESCRIPTION", 0x02080853, 0x02080a3b "ACTION", 0x020809de "UserAction=Click", 0x02080a6a "LAST")
Action1.c(94): Notify: CCI trace: Compiled_code(0): Action1()
經(jīng)過試驗,發(fā)現(xiàn)是因為 退出后有個自動跳轉(zhuǎn)。
如果退出結(jié)束代碼修改為下面就沒有問題了。
web_text_link("[退出]",
"Snapshot=t18.inf",
DESCRIPTION,
"Text=[退出]",
ACTION,
"UserAction=Click",
LAST);
web_browser("Sync",
"Snapshot=t18.inf",
DESCRIPTION,
ACTION,
"Sync",
LAST);
return 0;
結(jié)論:
web_text_link如果有中間跳轉(zhuǎn),不能放在代碼的最后,最后要有一個 Sync 。
48.Step download timeout(sec)設置
這個默認是120秒,但是經(jīng)常我們要設置的更大一些,具體設置方法:Vugen--》Vuser---》Runtime-settings----》Preferences------》option,將Step download timeout(sec)默認值120s改為自己需要的值,其次要改變HTTP-reguest connnect timeout(sec)和HTTP-reguest receive timeout(sec)也為相應的值。
49.修改本機tcp連接數(shù)
因為個人pc機的默認的tcp連接數(shù)只有15個(xp),所以我們在模擬虛擬多個用戶時,就會遇到tcp的連接限制,從而報錯。修改的方法:windows下運行 Patch.exe
輸入C,再輸入你要的TCP/IP連接數(shù)字(一般為500~2000)回車確認
輸入Y 回車確認。
倒計時15秒后結(jié)束。
接著再運行下Patch.exe,看連接數(shù)是不是由原來的10變成自己改了的數(shù)值。
Patch.exe 下載地址:http://www.touchboy.cn/2007/05/% ... %E6%8E%A5%E6%95%B0/
50.關于Error -27791: Error -27790:Error -27740:錯誤的解決方法:
錯誤如下:
Action.c(198): Error -27791: Server "www.zcpx.cn" has shut down the connection prematurely
Action.c(198): Error -27790: Failed to read data from server "www.zcpx.cn": [10053] Software caused connection
abort
Action.c(198): Error -27740: Overlapped transmission of request to "www.zcpx.cn" for URL
"http://www.zcpx.cn/userEntry.do" failed: WSA_IO_PENDING
解決辦法:
在腳本的最前面加上web_set_sockets_option("OVERLAPPED","0");
51. LR中錯誤代號為27796的一個解決方法
錯誤如下:
52.
1A:注冊表不能訪問或?qū)憣е碌?,可以恢復注冊表或卸載(清除注冊表,可以使用工具)重新安裝程序。
要啟支LR自帶的實例的服務時,出錯了,提示:端口已經(jīng)被另一個服務占用,請問一下能不能自己修改這個程序原來設定的端口?。?/p>
2A:停止服務之后,在程序的安裝目錄\WebTours下找到xitami.cfg文件修改portbase值,注意 默認的端口號是portbase+80,portbase值是1000;要把端口號改成8088,就把portbase改為8008,保存之后就是了(8088=8008+80)。然后重啟服務
二:LoadRunner面試(筆試)問題整理
1. 什么是負載測試?什么是性能測試?
負載測試是通過逐步增加系統(tǒng)負載,測試系統(tǒng)性能的變化,并最終確定在滿足性能指標的情況下,系統(tǒng)所能承受的大負載量的測試,例如,訪問一個頁面的響應時間規(guī)定不超過1秒,負載測試就是測試在響應時間為1秒時,系統(tǒng)所能承受的大并發(fā)訪問用戶的數(shù)量。
壓力測試通常是在高負載情況下來對系統(tǒng)的穩(wěn)定性進行測試,更有效地發(fā)現(xiàn)系統(tǒng)穩(wěn)定性的隱患和系統(tǒng)在負載峰值的條件下功能隱患等。
性能測試:指在一定的約束條件下(指定的軟件、硬件、網(wǎng)絡環(huán)境等),確定系統(tǒng)所能承受的大負載壓力。
2. 性能測試包含了哪些測試(至少舉出3種)
性能測試包含負載測試、壓力測試、大數(shù)據(jù)量測試、疲勞強度測試等。
3. 簡述性能測試的步驟
第一,分析產(chǎn)品結(jié)構(gòu),明確性能測試的需求,包括并發(fā)、極限、配置和指標等方面的性能要求,必要時基于LOAD測試的相同測略需同時考慮穩(wěn)定性測試的需求。
第二,分析應用場景和用戶數(shù)據(jù),細分用戶行為和相關的數(shù)據(jù)流,確定測試點或測試接口,列示系統(tǒng)接口的可能瓶頸,一般是先主干接口再支線接口,并完成初步的測試用例設計。
第三,依據(jù)性能測試需求和確定的測試點進行測試組網(wǎng)設計,并明確不同組網(wǎng)方案的重要程度或優(yōu)先級作為取舍評估的依據(jù),必要時在前期產(chǎn)品設計中提出支持性能測試的可測試性設計方案和對測試工具的需求。
第四,完成性能測試用例設計、分類選擇和依據(jù)用戶行為分析設計測試規(guī)程,并準備好測試用例將用到的測試數(shù)據(jù)。
第五,確定采用的測試工具。
第六,進行初驗測試,以主干接口的可用性為主,根據(jù)測試結(jié)果分析性能瓶頸,通過迭代保證基本的指標等測試的環(huán)境。
第七,迭代進行全面的性能測試,完成計劃中的性能測試用例的執(zhí)行。
第八,完成性能測試評估報告。
在進行性能測試的時候,我們需要知道一些有效的性能指標,下面我們來列出一些主要的性能指標:
一是,通用指標(指Web應用服務器、數(shù)據(jù)庫服務器必需測試項):
*ProcessorTime:指服務器CPU占用率,一般平均達到70%時,服務就接近飽和;
*Memory Available Mbyte:可用內(nèi)存數(shù),如果測試時發(fā)現(xiàn)內(nèi)存有變化情況也要注意,如果是內(nèi)存泄露則比較嚴重;
*Physicsdisk Time :物理磁盤讀寫時間情況。
二是,Web服務器指標:
*Avg Rps:平均每秒鐘響應次數(shù)=總請求時間/秒數(shù);
*Avg time to last byte per terstion(mstes):平均每秒業(yè)務角本的迭代次數(shù);*Successful Rounds:成功的請求;
*Failed Rounds:失敗的請求;
*Successful Hits:成功的點擊次數(shù);
*Failed Hits:失敗的點擊次數(shù);
*Hits Per Second:每秒點擊次數(shù);
*Successful Hits Per Second:每秒成功的點擊次數(shù);
*Failed Hits Per Second:每秒失敗的點擊次數(shù);
*Attempted Connections:嘗試鏈接數(shù)。
三是,數(shù)據(jù)庫服務器指標:
*User 0 Connections :用戶連接數(shù),也就是數(shù)據(jù)庫的連接數(shù)量;
*Number of deadlocks:數(shù)據(jù)庫死鎖;
*Butter Cache hit:數(shù)據(jù)庫Cache的命中情況。
4. 簡述使用Loadrunner的步驟
A4:制定性能測試計劃—>開發(fā)測試腳本—>設計測試場景—>執(zhí)行測試場景—>監(jiān)控測試場景—>分析測試結(jié)果
5. 什么時候可以開始執(zhí)行性能測試?
功能測試通過;一般需要進行性能測試的系統(tǒng),都是用戶量比較大、業(yè)務使用比較頻繁、比較重要的功能模塊。
6. LoadRunner由哪些部件組成?
A6:主要有三部分組成:
7. 你使用LoadRunner的哪個部件來錄制腳本?
使用Virtual User Generator錄制測試腳本
8. LoadRunner的哪個部件可以模擬多用戶并發(fā)下回放腳本?
LoadRunner的Controller組件。
9. 什么是集合點?設置集合點有什么意義?Loadrunner中設置集合點的函數(shù)是哪個?
在性能測試過程中,需要模擬大量用戶在同一時刻,訪問系統(tǒng)并同時操作某一任務,可以通過配置集合點來實現(xiàn),多個用戶同時進行某操作;
集合點可以在服務器上創(chuàng)建密集的用戶負載,使LoadRunner能夠測試服務器在負載狀態(tài)下的性能。
設置集合點函數(shù):lr_rendezvous("Meeting"); // Meeting是集合點名稱
10. 什么是場景?場景的重要性有哪些?如何設置場景?
場景用于模擬用戶實際業(yè)務操作;
LoadRunner中場景有手工場景和面向目標的場景。
設置場景:選擇場景類型、設置運行時設置、模擬用戶數(shù)、加減壓方式、持續(xù)時間,配置負載生成
1.選擇場景中需要的腳本
2.選擇為目標場景,還是指定的手工場景
3.設置用戶數(shù)、設置產(chǎn)生負載的設備
4.設置執(zhí)行策略
11. 請解釋一下如何錄制web腳本?
LR通過轉(zhuǎn)發(fā)請求,來捕獲數(shù)據(jù)包,來形成腳本
解釋:1.基于瀏覽器的應用程序推薦使用HTML-based Script, 腳本中采用
HTML頁面的形式來表示,這種方式的Script腳本容易維護,容易理解,使用該選項中的advance中的第一個選項,如果單純的HTML方式,是不允許使用關聯(lián)的。
2.不是基于瀏覽器的應用程序推薦使用URL-based Script,腳本中的表示采用基于URL 的方式,不是很好閱讀。
解釋:1.是否記錄錄制過程中的ThinkTime,如果記錄,還可以設置大值,一般我不記錄這個值。
2.通知Vugen去重新設置每個action之間的Http context,缺省是需要的。
3.完整記錄錄制過程的log,
4.保存一個本地的snapshot,可以加速顯示
5.把html的title放到web_reg_find函數(shù)里面
6.支持的字符集標準
7.Http header的錄制,我們采用缺省即可,不需要用web_add_header去錄制非標準的header信息。
對錄制的content的內(nèi)容進行filter,不作為resource處理的。
解釋:這個就是我前面提到的關聯(lián),系統(tǒng)已經(jīng)預先設置好了一些常見的關聯(lián)rules,我們錄制腳本之前,可以把系統(tǒng)的
12. 為什么要創(chuàng)建參數(shù)?如何創(chuàng)建參數(shù)?
參數(shù):在環(huán)境變化時必須時腳本具有環(huán)境變化的能力,就需要參數(shù)化(客戶端發(fā)送到服務器端)
1.確定要參數(shù)話的數(shù)據(jù)
2.設定規(guī)則形式來取值
13. 什么是關聯(lián)?請解釋一下自動關聯(lián)和手動關聯(lián)的不同。
關聯(lián):很多構(gòu)架用sessionid等方法標識不同任務和數(shù)據(jù),應用在每次運行時方式發(fā)送數(shù)據(jù)不完全相同,需要利用的機制對錄制的腳本進行處理,這種機制叫做關聯(lián)(服務端發(fā)送到客戶端)
14. 場景設置有哪幾種方法?
目標場景,手工場景
15. 你如何找出哪里需要關聯(lián)?請給一些你所在項目的實例。
用戶登陸,
客戶端發(fā)送請求后,服務端驗證正確性后,發(fā)送給客戶端sessionid,是某種規(guī)則產(chǎn)生。
16. 你在哪里設置自動關聯(lián)選項?
兩地方可以設置
1.設置允許錄制時進行自動關聯(lián),可以自定義規(guī)則
2.錄制完成后,vuser-scan action for correlations
17. 哪個函數(shù)是用來截取虛擬用戶腳本中的動態(tài)值?(手工關聯(lián))
web_reg_save_param()函數(shù)主要根據(jù)需要做關聯(lián)的動態(tài)數(shù)據(jù)前面和后面的固定字符串來識別、提取動態(tài)數(shù)據(jù),所以在做關聯(lián)時,需要找出動態(tài)數(shù)據(jù)的左、右邊界字符串。
18. 你在VUGen中何時選擇關閉日志?何時選擇標準和擴展日志?
Run-time,log,
當調(diào)試腳本時,可以只輸出錯誤日志,當在場景找你管加載腳本時,日志自動變?yōu)椴豢捎谩?/p>
Standard Log Option:選擇標準日志時,就會在腳本執(zhí)行過程中,生成函數(shù)的標準日志并且輸出信息,供調(diào)試用。大型負載測試場景不用啟用這個選項。
擴展日志包括警告和其他信息。大型負載測試不要啟用該選項。用擴展日志選項,可以指定哪些附加信息需要加到擴展日志中
19. 你如何調(diào)試LoadRunner腳本?
VuGen有兩個選項幫助調(diào)試Vuser腳本。Run Step by Step命令和斷點(breakpoints)。Option對話框中的調(diào)試設置(Debug setting)項,可以確定在場景執(zhí)行過程中執(zhí)行軌跡范圍。調(diào)試信息寫在output窗口??梢杂?/p>
lr_set_debug_messag函數(shù)在腳本中手工設置信息類型。如果我們只想接收到一小段腳本的調(diào)式信息。
20. 你在LR中如何編寫自定義函數(shù)?請給出一些你在以前進行的項目中編寫的函數(shù)。
在創(chuàng)建用戶自定義函數(shù)前我們需要和創(chuàng)建DLL(external libary)。把庫放在VuGen bin目錄下。一旦加了庫,把自定義函數(shù)分配做一個參數(shù)。該函數(shù)應該具有一下格式:__declspec (dllexport) char* (char*, char*)。
Milan
21. 什么是逐步遞增?你如何來設置?
Ramp up這個選項用于逐漸增加服務器的虛擬用戶數(shù)或負載量。設置一個初始值而且可以在兩個迭代之間設置一個值等待。設置Ramp up,請到‘Scenario Scheduling Options’。
22. 以線程方式運行的虛擬用戶有哪些優(yōu)點?
VuGen提供了用多線程的便利。這使得在每個生成器上可以跑更多的虛擬用戶。如果是以進程的方式跑虛擬用戶,為每個用戶加載相同的驅(qū)動程序到內(nèi)存中,因此占用了大量的內(nèi)存。這就限制了在單個生成器上能跑的虛擬用戶數(shù)。如果按線程運行,給定的所有虛擬用戶數(shù)(比如100)只是加載一個驅(qū)動程序?qū)嵗絻?nèi)存里。每個線程共用父驅(qū)動程序的內(nèi)存,因此在每個生成器上可以跑更多的虛擬用戶。
23. 當你需要在出錯時停止執(zhí)行腳本,你怎么做?
lr_abort函數(shù)放棄虛擬用戶腳本的執(zhí)行。說明虛擬用戶停止Action的執(zhí)行,直接執(zhí)行vuser_end然后結(jié)束執(zhí)行。在出現(xiàn)錯誤情況下想手工放棄腳本的執(zhí)行,這個函數(shù)是有用的。用這個函數(shù)停止腳本時,Vuser被指定為“Stopped”狀態(tài)。為了這個函數(shù)起作用,開始時候就不能選擇Run-Time Settings中的Continue on error選項。
24. 響應時間和吞吐量之間的關系是什么?
吞吐量圖顯示的是虛擬用戶每秒鐘從服務器接收到的字節(jié)數(shù)。當和響應時間比較時,可以發(fā)現(xiàn)隨著吞吐量的降低,響應時間也降低,同樣的,吞吐量的峰值和大響應時間差不多在同時出現(xiàn)。
25. 說明一下如何在LR中配置系統(tǒng)計數(shù)器?
通過Web資源監(jiān)視器,利用這些監(jiān)控器可以分析web服務器的吞吐量、點擊率、每秒http響應數(shù)以及每秒下載的頁面數(shù)。
26. 什么是think time?think_time有什么用?
思考時間是真實用戶在action之間等待的時間。例如:當一個用戶從服務器接收到數(shù)據(jù)時,用戶可能需要在響應之前等待幾分鐘回顧數(shù)據(jù),這種推遲被稱為思考時間。
27. 標準日志和擴展日志的區(qū)別是什么?
Standard Log Option:選擇標準日志時,就會在腳本執(zhí)行過程中,生成函數(shù)的標準日志并且輸出信息,供調(diào)試用。大型負載測試場景不用啟用這個選項。
擴展日志包括警告和其他信息。大型負載測試不要啟用該選項。用擴展日志選項,可以指定哪些附加信息需要加到擴展日志中
28. 解釋以下函數(shù)及他們的不同之處。
Lr_debug_message
lr_debug_message 函數(shù)在指定的消息級別
// 處于活動狀態(tài)時發(fā)送一條調(diào)試消息。如果指定的
// 消息級別未處于活動狀態(tài),則不發(fā)出消息。
Lr_output_message
要發(fā)送不是特定錯誤消息的特殊通知,
Lr_error_message
函數(shù)將錯誤消息發(fā)送到
// 輸出窗口和 Vuser日志文件
Lrd_stmt lrd_exec 函數(shù)執(zhí)行 lrd_stmt設置的 SQL 語句。
Lrd_fetch 函數(shù)從結(jié)果集中提取后續(xù)若干行
result set.
函數(shù)準備用于
// 通過光標輸出字符串(通常為 SQL語句)
// 的下一結(jié)果集。對于 CtLib,它發(fā)出 ct_result
// 命令,并且在 ODBC中它運行用于當前數(shù)據(jù)庫
29. 什么是吞吐量?
單位時間內(nèi)系統(tǒng)處理客戶端的請求數(shù)。
30. action和init、end除了迭代的區(qū)別還有其他嗎?
在init、end中不能使用集合點、事務等, init、end只執(zhí)行一次。
31. 在什么地方設置HTTP頁面filter?
在runtime_settings中download filter里面進行設置。
32. pot mapping的原理是什么?
就是代理服務器
33. HTTP的超時有哪三種?
HTTP-request connect timeout、HTTP-request receive timeout、step download timeout
34. 什么是contentcheck?如何來用?
ContentCheck的設置是為了讓VuGen檢測何種頁面為錯誤頁面。如果被測的Web 應用沒有使用自定義的錯誤頁面,那么這里不用作更改;如果被測的Web應用使用了自定義的錯誤頁面,那么這里需要定義,以便讓VuGen 在運行過程中檢測,服務器返回的頁面是否包含預定義的字符串,進而判斷該頁面是否為錯誤頁
面。如果是,VuGen就停止運行,指示運行失敗。
使用方法:點擊在runtime settings中點擊“contentcheck”,然后新建立一個符合要求的應用程序和規(guī)則,設定需要查找的文本和前綴后綴即可使用。
35. network中的speed simulation是模擬的什么帶寬?
模擬用戶訪問速度的帶寬。
36. 生成WEB性能圖有什么意義?大概描述即可。
可以很直觀的看到,在負載下系統(tǒng)的運行情況以及各種資源的使用情況,可以對系統(tǒng)的性能瓶頸定位、性能調(diào)優(yōu)等起到想要的輔助作用。
37. 如果刷新controller里的腳本?
在controller中,點擊detailis-Refresh-script即可。
38. 進程和線程有什么區(qū)別?
線程有自己的全局數(shù)據(jù)。線程存在于進程中,因此一個進程的全局變量由所有的線程共享。由于線程共享同樣的系統(tǒng)區(qū)域,操作系統(tǒng)分配給一個進程的資源對該進程的所有線程都是可用的,正如全局數(shù)據(jù)可供所有線程使用一樣。在Controller中將使用驅(qū)動程序(如mdrv.exe、r3vuser.exe)運行vuser。如果按進程運行每個vuser,則對于每個vuser實例,都將反復啟動同一驅(qū)動程序并將其加載到內(nèi)存中。將同一驅(qū)動程序加載到內(nèi)存中會占用大量的RAM(隨機存儲器)及其他系統(tǒng)資源。這就限制了可以在任一負載生成器上運行的vuser數(shù)量。如果按線程運行每個vuser,Controller為每50個vuser(默認情況下)僅啟動驅(qū)動程序(如mdrv.exe)的一個實例。該驅(qū)動程序?qū)訋讉€vuser,每個vuser都按線程運行。這些線程vuser將共享父驅(qū)動進程的內(nèi)存段。這就消除了多次重新加載驅(qū)動程序/進程的需要,節(jié)省了大量內(nèi)存空間,從而可以在一個負載生成器上運行更多的Vuser.
39. 如何把腳本和結(jié)果放到load generator的機器上?
在controller中,點擊Results-Results settings,在里面進行相應的設置即可。
40. 如何設置才能讓集合點只對一半的用戶生效?
對集合點策略進行相應的設置即可。即在controller中,點擊Scenario-Rendezvous-policy進行相應的設置即可,由于題目中“一半的用戶”沒有說明白具體指什么樣的用戶,現(xiàn)在不好確定具體對里面的哪個選項進行設置。
41. LRd的API分為幾類
A:通用的API:,就是跟具體的協(xié)議無關,在任何協(xié)議的腳本里都能用的;
B:針對協(xié)議的:像lrs前綴是winsock的;lrd的是針對database;
C:自定義的:這個范圍就比較廣了;比如至少有Java Vuser API、lrapi、XML API。還可以添加WindowsAPI和自定義函數(shù)庫。
42. LR幾種日志函數(shù)的區(qū)別?
【lr_message】 int lr_message (const char *format, exp1, exp2,…expn.);中文解釋:lr_message函數(shù)將信息發(fā)送到日志文件和輸入窗口。在VuGen中運行時,輸入文件為output.txt。
【lr_log_message】 int lr_log_message (const char *format, exp1, exp2,…expn.);中文解釋:lr_log_message函數(shù)將消息發(fā)送到Vuser或代理日志文件(取決于應用程序),而不是發(fā)送到輸出窗口。通過向日志文件發(fā)送錯誤消息或其他信息性消息,可以將該函數(shù)用于調(diào)試。 【lr_error_message】 int lr_error_message (const char *format, exp1, exp2,…expn. );中文解釋:lr_error_message函數(shù)將錯誤消息發(fā)送到輸出窗口和Vuser日志文件。要發(fā)送不是特定錯誤消息的特殊通知,請使用lr_output_message。
【lr_output_message】 int lr_output_message (const char *format, exp1, exp2,…expn.);中文解釋:lr_output_message函數(shù)將帶有腳本部分的行號的消息發(fā)送到輸出窗口和日志文件。
【lr_debug_message函數(shù)組】 int lr_debug_message (unsigned int message_level, const char *format, … );中文解釋:lr_debug_message函數(shù)在指定的消息級別處于活動狀態(tài)時發(fā)送一條調(diào)試信息。如果指定的消息級別未出于活動狀態(tài),則不發(fā)送消息。您可以從用戶界面或者使用lr_set_debug_message,將處于活動狀態(tài)的消息級別設置為MSG_CLASS_BRIEF_LOG或MSG_CLASSS_EXTENDED_LOG。要確定當前級別,
請使用lr_get_debug_message。 unsigned int lr_get_debug_message ( );中文解釋:lr_get_debug_message函數(shù)返回當前的日志運行時設置。該設置確定發(fā)送到輸出端的信息。日志設置是使用運行時設置對話框或通過使用lr_set_debug_message函數(shù)指定的。 int lr_set_debug_message (unsigned int message_level, unsigned int on_off); 中文解釋:lr_set_debug_message函數(shù)設置腳本執(zhí)行的調(diào)試消息級別message_lvl。通過設置消息級別,可以確定發(fā)送哪些信息。啟動設置的方法是將LR_SWITCH_ON作為on_off傳遞,禁用設置的方法是傳遞LR_SWITCH_OFF。
【lrd_stmt】:將SQL語句與光標關聯(lián)
【lrd_fetch】:提取結(jié)果集中得下一條記錄
43. 性能瓶頸分析方法?
同一場景
1.小用戶量的情況下測試
2.大用戶量情況下的測試
分析的方法:
整個系統(tǒng)架構(gòu)分析,系統(tǒng)響應時間消耗,利用圖表分析
查看事務響應時間,通過事務摘要圖分析事務響應時間,那個消耗大(通過小用戶量和大用戶量的響應時間分析,查看那個事務響應時間最高),確定哪部分功能是性能的瓶頸,分析window resource圖表,查看cpu
使用下列計數(shù)器標識cpu瓶頸
Processor\ Interrupts/sec
Processor\ % Processor Time
Process(process)\ % Processor Time
System\ Processor Queue Length
通過它來確定是否硬件本身出現(xiàn)瓶頸,或者進一步確定應該怎么去判斷性能產(chǎn)生瓶頸的地方!
下一步去判斷進程,那個進程消耗cpu最高
下邊就有很多種情況需要你自己去判斷,有可能是進程調(diào)用了的函數(shù)消耗了系統(tǒng)資源形成上邊的問題,也有可能是后臺數(shù)據(jù)庫出現(xiàn)的問題(這個就要看你的系統(tǒng)配置是什么樣的,比如你的db服務器和應用服務器都配置在一臺機器上)
性能產(chǎn)生瓶頸有很多地方,所以需要進一判斷,是否是后臺數(shù)據(jù)庫的問題還有待分析,是那條語句導致的問題需要進一步分析判斷。
分析原則:
具體問題具體分析(這是由于不同的應用系統(tǒng),不同的測試目的,不同的性能關注點)
查找瓶頸時按以下順序,由易到難。
服務器硬件瓶頸-〉網(wǎng)絡瓶頸(對局域網(wǎng),可以不考慮)-〉服務器操作系統(tǒng)瓶頸(參數(shù)配置)-〉中間件瓶頸(參數(shù)配置,數(shù)據(jù)庫,web服務器等)-〉應用瓶頸(SQL語句、數(shù)據(jù)庫設計、業(yè)務邏輯、算法等)
注:以上過程并不是每個分析中都需要的,要根據(jù)測試目的和要求來確定分析的深度。對一些要求低的,我們分析到應用系統(tǒng)在將來大的負載壓力(并發(fā)用戶數(shù)、數(shù)據(jù)量)下,系統(tǒng)的硬件瓶頸在哪兒就夠了。
分段排除法很有效
分析的信息來源:
1 根據(jù)場景運行過程中的錯誤提示信息
2 根據(jù)測試結(jié)果收集到的監(jiān)控指標數(shù)據(jù)
一.錯誤提示分析
分析實例:
1 Error: Failed to connect to server “10.10.10.30:8080″: [10060] Connection
Error: timed out Error: Server “10.10.10.30″ has shut down the connection prematurely
分析:
A、應用服務死掉。
(小用戶時:程序上的問題。程序上處理數(shù)據(jù)庫的問題)
B、應用服務沒有死
(應用服務參數(shù)設置問題)
例:在許多客戶端連接Weblogic應用服務器被拒絕,而在服務器端沒有錯誤顯示,則有可能是Weblogic中的server元素的 AcceptBacklog屬性值設得過低。如果連接時收到connection refused消息,說明應提高該值,每次增加25%
C、數(shù)據(jù)庫的連接
(1、在應用服務的性能參數(shù)可能太小了 2、數(shù)據(jù)庫啟動的大連接數(shù)(跟硬件的內(nèi)存有關))
2 Error: Page download timeout (120 seconds) has expired
分析:可能是以下原因造成
A、應用服務參數(shù)設置太大導致服務器的瓶頸
B、頁面中圖片太多
C、在程序處理表的時候檢查字段太大多
二.監(jiān)控指標數(shù)據(jù)分析
1.大并發(fā)用戶數(shù):
應用系統(tǒng)在當前環(huán)境(硬件環(huán)境、網(wǎng)絡環(huán)境、軟件環(huán)境(參數(shù)配置))下能承受的大并發(fā)用戶數(shù)。
在方案運行中,如果出現(xiàn)了大于3個用戶的業(yè)務操作失敗,或出現(xiàn)了服務器shutdown的情況,則說明在當前環(huán)境下,系統(tǒng)承受不了當前并發(fā)用戶的負載壓力,那么大并發(fā)用戶數(shù)就是前一個沒有出現(xiàn)這種現(xiàn)象的并發(fā)用戶數(shù)。
如果測得的大并發(fā)用戶數(shù)到達了性能要求,且各服務器資源情況良好,業(yè)務操作響應時間也達到了用戶要求,那么OK。否則,再根據(jù)各服務器的資源情況和業(yè)務操作響應時間進一步分析原因所在。
2.業(yè)務操作響應時間:
分析方案運行情況應從平均事務響應時間圖和事務性能摘要圖開始。使用“事務性能摘要”圖,可以確定在方案執(zhí)行期間響應時間過長的事務。
細分事務并分析每個頁面組件的性能。查看過長的事務響應時間是由哪些頁面組件引起的?問題是否與網(wǎng)絡或服務器有關?
如果服務器耗時過長,請使用相應的服務器圖確定有問題的服務器度量并查明服務器性能下降的原因。如果網(wǎng)絡耗時過長,請使用“網(wǎng)絡監(jiān)視器”圖確定導致性能瓶頸的網(wǎng)絡問題
3.服務器資源監(jiān)控指標:
內(nèi)存:
1 UNIX資源監(jiān)控中指標內(nèi)存頁交換速率(Paging rate),如果該值偶爾走高,表明當時有線程競爭內(nèi)存。如果持續(xù)很高,則內(nèi)存可能是瓶頸。也可能是內(nèi)存訪問命中率低。
2 Windows資源監(jiān)控中,如果Process\Private Bytes計數(shù)器和Process\Working Set計數(shù)器的值在長時間內(nèi)持續(xù)升高,同時Memory\Available bytes計數(shù)器的值持續(xù)降低,則很可能存在內(nèi)存泄漏。
內(nèi)存資源成為系統(tǒng)性能的瓶頸的征兆:
很高的換頁率(high pageout rate);
進程進入不活動狀態(tài);
交換區(qū)所有磁盤的活動次數(shù)可高;
可高的全局系統(tǒng)CPU利用率;
內(nèi)存不夠出錯(out of memory errors)
處理器:
1 UNIX資源監(jiān)控(Windows操作系統(tǒng)同理)中指標CPU占用率(CPU utilization),如果該值持續(xù)超過95%,表明瓶頸是CPU??梢钥紤]增加一個處理器或換一個更快的處理器。如果服務器專用于SQL Server,可接受的大上限是80-85%
合理使用的范圍在60%至70%。
2 Windows資源監(jiān)控中,如果System\Processor Queue Length大于2,而處理器利用率(Processor Time)一直很低,則存在著處理器阻塞。
CPU資源成為系統(tǒng)性能的瓶頸的征兆:
很慢的響應時間(slow response time)
CPU空閑時間為零(zero percent idle CPU)
過高的用戶占用CPU時間(high percent user CPU)
過高的系統(tǒng)占用CPU時間(high percent system CPU)
長時間的有很長的運行進程隊列(large run queue size sustained over time)
磁盤I/O:
1 UNIX資源監(jiān)控(Windows操作系統(tǒng)同理)中指標磁盤交換率(Disk rate),如果該參數(shù)值一直很高,表明I/O有問題??煽紤]更換更快的硬盤系統(tǒng)。
2 Windows資源監(jiān)控中,如果 Disk Time和Avg.Disk Queue Length的值很高,而Page Reads/sec頁面讀取操作速率很低,則可能存在磁盤瓶徑。
I/O資源成為系統(tǒng)性能的瓶頸的征兆 :
過高的磁盤利用率(high disk utilization)
太長的磁盤等待隊列(large disk queue length)
等待磁盤I/O的時間所占的百分率太高(large percentage of time waiting for disk I/O)
太高的物理I/O速率:large physical I/O rate(not sufficient in itself)
過低的緩存命中率(low buffer cache hit ratio(not sufficient in itself))
太長的運行進程隊列,但CPU卻空閑(large run queue with idle CPU)
4.數(shù)據(jù)庫服務器:
SQL Server數(shù)據(jù)庫:
1 SQLServer資源監(jiān)控中指標緩存點擊率(Cache Hit Ratio),該值越高越好。如果持續(xù)低于80%,應考慮增加內(nèi)存。
2 如果Full Scans/sec(全表掃描/秒)計數(shù)器顯示的值比1或2高,則應分析你的查詢以確定是否確實需要全表掃描,以及SQL查詢是否可以被優(yōu)化。
3 Number of Deadlocks/sec(死鎖的數(shù)量/秒):死鎖對應用程序的可伸縮性非常有害,并且會導致惡劣的用戶體驗。該計數(shù)器的值必須為0。
4 Lock Requests/sec(鎖請求/秒),通過優(yōu)化查詢來減少讀取次數(shù),可以減少該計數(shù)器的值。
Oracle數(shù)據(jù)庫:
1 如果自由內(nèi)存接近于0而且?guī)炜齑婊驍?shù)據(jù)字典快存的命中率小于0.90,那么需要增加SHARED_POOL_SIZE的大小。
快存(共享SQL區(qū))和數(shù)據(jù)字典快存的命中率:
select(sum(pins-reloads))/sum(pins) from v$librarycache;
select(sum(gets-getmisses))/sum(gets) from v$rowcache;
自由內(nèi)存 select * from v$sgastat where name=’free memory’;
2 如果數(shù)據(jù)的緩存命中率小于0.90,那么需要加大DB_BLOCK_BUFFERS參數(shù)的值(單位:塊)。
緩沖區(qū)高速緩存命中率:
select name,value from v$sysstat where name in (‘db block gets’,
‘consistent gets’,'physical reads’) ;
Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))
3 如果日志緩沖區(qū)申請的值較大,則應加大LOG_BUFFER參數(shù)的值。
日志緩沖區(qū)的申請情況:
select name,value from v$sysstat where name = ‘redo log space requests’ ;
4 如果內(nèi)存排序命中率小于0.95,則應加大SORT_AREA_SIZE以避免磁盤排序。