山東BOSS性能壓力測試

1. 概述




在山東BOSS性能壓力測試過程當中,發現腳本對於整個壓力測試過程的重要性,一個壓力測試腳本錄製和編輯修改得怎麼樣直接影響後面壓力測試的執行。一般狀況下,腳本應儘量的精簡,就像寫代碼同樣。針對BOSS系統的特色, 我的 認爲把單一業務錄製成一個Action,並在腳本中添加Transaction,Find檢查(能夠採用URL-based scrīpt 方式錄製並事先設定),Rendezvous,參數化等基本元素,然而有時咱們會發現光有這些基本元素還不能知足咱們的要求。好比在Controller 中運行咱們的腳本時,一旦壓力過大或某種緣由致使某一業務失敗,而此時咱們很想盡快地找出錯誤的緣由。固然此時咱們第一想到的是,查找 日誌 ,可是有時發現查找日誌很不方便,所以咱們但願尋求一種更快捷的方式,但願能直接從Controller的Errors錯誤中找到出錯的服務號碼、在第幾回Iteration的哪一個Transaction出錯。實現的方式,固然是經過簡單的編程來調用錯誤日誌裏的信息,另外本文中還簡單介紹了關於LoadRunner 工具使用的一些經常使用注意事項、腳本處理技巧和一些經常使用性能參數的分析及 性能測試 中機器瓶頸的定義和查看機器瓶頸的相關命令。 
下面再具體的一一介紹。 


2.性能測試腳本說明



一個規範的性能測試腳本就像一段規範的程序代碼同樣,須要基本的說明信息: 
在下面要介紹的腳本中,我把這些信息以註釋的形式放在vuser_init最前面: 
/* 
@corporation:Copyright By *** Technologies CO.,LTD. All Rights Reserved. 
@Athour:XuLinLin 
@Date:2005-09-18 
@Name:異地繳費壓力測試腳本 
@Parameter:BOSSURL,LogName,PhoneNum,iteration,FanHui 
@Data:BOSSURL:BOSSURL.dat; //因爲BOSS壓力測試前臺展示環境多,故將地址也參數化。 
LogName:LogName.dat; //登陸用操做員,選擇具有異地繳費權限的操做員,這裏選擇的是德州操做員300個。 
PhoneNum:PhoneNum.dat; //用於異地繳費的服務號碼,這裏選擇的是煙臺的正常在用的標準全球通號碼3000個。 
iteration:iteration.dat; //用於壓力測試出錯時,打印出錯所在的循環次數。 
@Descrīption:此腳本用於測試異地繳費的性能及穩定性,選用德州的操做員對煙臺的標準全球通號碼進行異地繳費,目標是 
經過vuser模仿真實操做員進行異地繳費,達到驗證或測試系統性能和穩定性的目的。 
@Notes:腳本的錄製使用的是LoadRunner8.0的VU,採用的是URL-based scrīpt方式,須要特別注意的是Recording Options(按Ctrl+F7) 
的Advanced 選項裏的Surport Charset通常狀況默認爲不選,除非字符集合採用的是國際標準才選中UTF-8選項,不然會出現漢字亂碼現象。 
*/ 


3.登錄成功與否判斷



一般狀況下,任何業務必須在登錄成功後才能作,因此有必要對登錄成功與否進行判斷: 
下面我從腳本中取出相關部分進行簡單介紹: 
vuser_init() 
{ 
int status; //定義變量用於判斷登錄是否成功 
web_reg_find("Text="山東移動BOSS"", 
LAST); 
……. 
……. 
web_submit_data("reguserAction.do", //登錄提交數據Action。 
"Action="http://{BOSSURL}/boss/reguserAction.do"", 
"Method="POST"", 
"RecContentType="text/html"", 
"Referer="http://{BOSSURL}/boss/index.jsp"", 
"Snapshot="t12.inf"", 
"Mode="HTTP"", 
ITEMDATA, 
"Name="logname"", "Value="{LogName}"", ENDITEM, 
"Name="password"", "Value=", ENDITEM, 
LAST); 
status = web_submit_data("reguserAction.do", // 取成功與否標誌 
"Action="http://{BOSSURL}/boss/reguserAction.do"", 
"Method="POST"", 
"RecContentType="text/html"", 
"Referer="http://{BOSSURL}/boss/index.jsp"", 
"Snapshot="t12.inf"", 
"Mode="HTTP"", 
ITEMDATA, 
"Name="logname"", "Value="{LogName}"", ENDITEM, 
"Name="password"", "Value=", ENDITEM, 
LAST); 
if (status ="=" LR_FAIL) //一旦登錄失敗,腳本給出提示報錯信息。 
{ 
lr_error_message("錯誤信息: %s", "不能正常登錄!"); 
return -1; 
} 
} 


4.定義事務



事務的定義,很簡單,也頗有必要,儘可能是每一個定義的事物符合邏輯和小。 
在下面的腳本中,在異地繳費這一業務中定義了兩個Transaction:準備異地繳費數據和提交異地繳費,見以下腳本代碼: 
lr_start_transaction("準備異地繳費數據"); 

web_set_max_html_param_len("4096"); 
………. 
web_submit_data("chargeacc.do", 
"Action="http://{BOSSURL}/boss/charge/commonbusiness/acccharge/chargeacc.do?act=queryaccount"", 
"Method="POST"", 
"RecContentType="text/html"", 
"Referer="http://{BOSSURL}/boss/charge/commonbusiness/acccharge/acccharge.jsp?act=first"", 
"Snapshot="t74.inf"", 
"Mode="HTTP"", 
ITEMDATA, 
"Name="isconfirm"", "Value="no"", ENDITEM, 
"Name="chargetype"", "Value="telnumber"", ENDITEM, 
"Name="telnumber"", "Value="{PhoneNum}"", ENDITEM, 
"Name="nowfee"", "Value="0.0"", ENDITEM, 
"Name="factfee"", "Value=", ENDITEM, 
"Name="totalfee"", "Value="0.0"", ENDITEM, 
LAST); 
lr_end_transaction("準備異地繳費數據", LR_AUTO); 


5.加強腳本,腳本編程



加強腳本,對腳本進行簡單的編程,爲性能或壓力測試提供方便,這也是寫 
本文的宗旨,下面對此作簡單的介紹: 
5.1定義成功與否的判斷標誌或字符串。 

在此,我把判斷成功與否的標誌定義在異地繳費Action 最前面,具體定義以下:char fanhuiflag[30]="操做業務數據成功!"; 
可是你們可能會問,字符串"操做業務數據成功!"從何處而來,能夠確定的不能憑空想象,成功標誌可從兩三種方式來取得: 
第一種:也是最簡單的一種,直接從腳本中取得,具體操做是以View Tree 方式找到相關的界面,而後從Server Response的Snapshot的Body裏去取。見下面的 圖片 : 
注:Snapshot在錄製前要將Recording Options>Advanced裏的Save snapshot resources locally 選項選中。 

第二種方式,從腳本代碼中去取,即取find函數中相關字符串,具體作法是,找到在提交事件前的web_reg_find函數,而後從中取相關字符串。 
web_reg_find("Text="---------操做業務數據成功!--------"", 
LAST); 
值得注意的是要有web_reg_find函數,能夠在錄製前選中Recording Options>Advanced裏的Generate web_reg_find functions for page titles 選項。 

第三種方式,從本地的snapshot裏去取,具體操做,首先找到提交數據事件相關腳本,找到snapshot文件的名稱,而後從本地的data文件裏去找這個snapshot文件,而後叢中找到咱們須要的字符串。 
web_reg_find("Text="---------操做業務數據成功!--------"", 
LAST); 
……. 
web_submit_data("chargeacc.do_3", 
"Action="http://{BOSSURL}/boss/charge/commonbusiness/acccharge/chargeacc.do?act=submit&atype=commitdata"", 
"Method="POST"", 
"RecContentType="text/html"", 
"Referer="http://{BOSSURL}/boss/charge/commonbusiness/acccharge/chargeacc.do?act=querycustomer"", 
"Snapshot="t129.inf"", 
"Mode="HTTP"", 
ITEMDATA, 
"Name="isconfirm"", "Value="no"", ENDITEM, 
"Name="chargetype"", "Value="telnumber"", ENDITEM, 
"Name="telnumber"", "Value=", ENDITEM, 
"Name="nowfee"", "Value="8.8"", ENDITEM, 
"Name="factfee"", "Value="0.00"", ENDITEM, 
"Name="totalfee"", "Value="8.8"", ENDITEM, 
"Name="accountno"", "Value="{WCSParam_Diff1}"", ENDITEM, 
"Name="factpay"", "Value="8.8"", ENDITEM, 
"Name="grantpercent"", "Value=", ENDITEM, 
"Name="grantfee"", "Value="0"", ENDITEM, 
"Name="takecash"", "Value="8.8"", ENDITEM, 
"Name="zero"", "Value="0"", ENDITEM, 
"Name="paytype"", "Value="Cash"", ENDITEM, 
"Name="remark"", "Value=", ENDITEM, 
"Name="invoice"", "Value="joininvoice"", ENDITEM, 
LAST); 
5.2設置和保存判斷成功與否的參數 

有一點你們都很清楚,業務成功返回的字符串和失敗返回的字符串是不一樣的,咱們所要作的是將返回的字符串作爲參數保存下來,而後拿這個參數和咱們事先定義好的成功的標誌作比較,有兩種方式能夠設置和保存這一參數,下面簡單介紹: 
第一種方式也是最準確的方式,是以View Tree 方式找到相關的界面,而後從Server Response的Snapshot的Body裏的成功的返回標誌,而後對其進行Create Parameter,這樣LoadRunner會自動在腳本中添加web_reg_save_param函數,具體以下: 
// [WCSPARAM WCSParam_Text2 24 操做業務數據成功!_Text2] Parameter {WCSParam_Text2} created by Correlation Studio 
web_reg_save_param("WCSParam_Text2", 
"LB="---------"", 
"RB="-"", 
"Ord="1"", 
"RelFrameId="1"", 
"Search="Body"", 
LAST); 
第二種方式是在提交事件前添加web_reg_save_param函數,具體操做是在提交事件前右擊鼠標選擇Insert Before 選項,而後在彈出的對話框中選擇Services裏的web_reg_save_param選項,單擊OK按紐,而後在彈出的對話框中輸入相關的數據。 
5.3 編寫相關判斷代碼段 

在已經定義好判斷字符串和設置和保存好成功與否的標誌字符串參數後,編寫相關判斷代碼段,這也是最關鍵的地方,具體代碼段以下: 
if (strcmp(fanhuiflag,lr_eval_string("{WCSParam_Text2}"))!="0) 
{ 
lr_error_message("消息: %s,在第 %s 次循環時出錯,出錯號碼:%s", "提交異地繳費數據失敗!", lr_eval_string("{iteration}"), lr_eval_string("{PhoneNum}")); 
} 
簡單解釋以下: 
fanhuiflag:前面已經定義好的成功標誌字符串的數組名,固然前面也能夠用指針來實現,這裏不作介紹。 
WCSParam_Text2:爲實現設置和保存好的成功與否返回的字符串的參數; 
PhoneNum:服務號碼的參數化,具體爲電話號碼。關於參數化,這裏不作分析和解釋部分。 
Iteration:爲了定位具體的循環而設置的參數。 
Strcmp函數:LoadRunner自帶的字符串比較函數,相等時返回0 
lr_eval_string函數:LoadRunner自帶求字符串函數,函數格式爲 
char * lr_eval_string (const char * instring ); 
(另外一種判斷方式:先事先定義好int rc="1;" char *fanhuiflag="操做業務數據成功!";而後在定義事務的結尾進行判斷: rc="strcmp(str_tip,lr_eval_string(""{re_str_tip}")); 
if(rc="=0)" 
{ 
lr_end_transaction("異地繳費_提交", LR_PASS); 
} 
else 
{ 
lr_error_message("異地繳費_提交失敗,號碼爲:%s",lr_eval_string("{msisdn}")); 
lr_end_transaction("異地繳費_提交", LR_FAIL); 
} 
//lr_end_transaction("異地繳費_提交",LR_AUTO);) 
5.4 驗證需求是否實現 

下面簡單介紹,整個驗證過程,在確保腳本正確和測試環境正常的狀況下,咱們先在VU裏驗證下是否真正實現了咱們想要的功能,爲了方便,我特意將判斷條件該爲="=而不是!=,經過查看日誌來檢查。 
首先,選中菜單欄裏的Run-time Settings子菜單,設置裏面的Log選項,選中Enable Logging 和Always send messages 和Extended log 及Parameter substitution。 
設置Run Logic 裏的Number of Iterations 爲2,而後運行,並查看日誌。能夠獲得以下的日誌(只取了關鍵部分的): 
第一次循環關鍵部分: 
YiDiJiaoFei.c(598): Notify: Transaction "提交異地繳費數據" ended with "Fail" status (Duration: 4.8459 Wasted Time: 0.0060). 
YiDiJiaoFei.c(605): Notify: Parameter Substitution: parameter "WCSParam_Text2" = "操做業務數據成功!" 
YiDiJiaoFei.c(607): Notify: Next row for parameter iteration = 1 [table = iteration]. 
YiDiJiaoFei.c(607): Notify: Parameter Substitution: parameter "iteration" = "1" 
YiDiJiaoFei.c(607): Notify: Parameter Substitution: parameter "PhoneNum" = "13953555588" 
YiDiJiaoFei.c(607): Error: 消息: 提交異地繳費數據失敗!,在第 1 次循環時出錯,出錯號碼:13953555588 
第二次循環關鍵部分: 
YiDiJiaoFei.c(598): Notify: Transaction "提交異地繳費數據" ended with "Fail" status (Duration: 4.2347 Wasted Time: 0.0064). 
YiDiJiaoFei.c(605): Notify: Parameter Substitution: parameter "WCSParam_Text2" = "操做業務數據成功!" 
YiDiJiaoFei.c(607): Notify: Next row for parameter iteration = 2 [table = iteration]. 
YiDiJiaoFei.c(607): Notify: Parameter Substitution: parameter "iteration" = "2" 
YiDiJiaoFei.c(607): Notify: Parameter Substitution: parameter "PhoneNum" = "13953572390" 
YiDiJiaoFei.c(607): Error: 消息: 提交異地繳費數據失敗!,在第 2 次循環時出錯,出錯號碼:13953572390 
下面驗證執行時,能正確找到出錯的號碼信息,將腳本加入到場景後,一樣設置好Run-time Settings。 
設置結果保存路徑等相關信息,按Start Scenario 執行場景,等出錯是單擊右上角的Errors,而後選中錯誤信息再按Details按紐查看錯誤信息。 


6.多機均勻對被測系統施壓編輯本段回目錄


怎麼樣使多臺產生vuser的測試機均勻地對被測試的系統施加壓力? 
在測試的過程當中,爲了儘量減小或者避免自己的測試機成爲測試過程當中的瓶頸,須要使用多臺測試機產生vuser對被測試系統施加壓力,下面對操做步驟作簡單介紹: 
在默認模式下使用controller添加多臺Generators機器時,無論你怎麼加,最終能真正起做用的只有一臺(10.19.180.2/3/4或localhost): 
爲了讓10.19.180.2/3/4機器同時能真正被添加進去,咱們須要作如下幾步工做: 
改變場景模式,將組模式()改變爲百分比模式(percentage mode),具體作法是,選擇Scenario菜單下的Convert Scenario to the Percentage Mode; 
而後,在已經添加好的Load Generators機器列表中同時選擇你想選擇的機器; 
最後,點OK按鈕就能夠獲得咱們所要的結果了。 
固然,若有必要咱們還能夠把場景模式改成Vuser Group Mode,具體作法以下: 
選擇Scenario菜單下的Convert Scenario to the Vuser Group Mode; 
而後在彈出的對話框中,單擊Yes按鈕能夠獲得以下結果, 
到此爲止,添加多臺Load Generators測試機整個過程就完成了,其實很簡單,關鍵是你發現了沒有。 


7. 怎麼樣在關聯時取列表的最後一個值



在壓力測試腳本的關聯過程當中,咱們有時可能須要關聯最新的值(如最新的流水號,一般狀況下,最新的流水號放在列表的最下方),因此找最新的流水號就是最列表最下方,若是保存在數組裏,那就是找index值最大的那個元素。下面以重打發票(注:具體流程爲先繳費,而後查詢繳費歷史,而後從繳費歷史裏找到最新的流水號,而後使用此流水號進行重打發票)爲例對整個過程作詳細的介紹: 
首先,在繳費歷史裏找到須要關聯的流水號並關聯之,具體作法以下, 
7.1以Tree View方式打開腳本並在對應事件的Page View裏找到最新的流水號 
找到咱們須要關聯的流水號(這裏爲536dxwf0200051031000000)後,須要把它給關聯,(由於返回的值是過後才知道的,且對於不一樣的電話號碼,對應的返回值不一樣,因此對於這樣的值是須要關聯的。)具體作法是打開Server Response 頁面並在Body裏找到須要關聯的流水號,而後選中此流水號並在右鍵彈出的菜單中使用Create Parameter關聯之。 


7.2單擊是(Y)按鈕,對應的腳本中會增長以下內容。 
單擊View scrīpt 圖標以scrīpt模式查看關聯狀況。 
7.3到此爲止腳本中多出以下代碼段,下面對它作必定的分析: 
web_reg_find("Text="繳費歷史查詢"", 
LAST); 
// [WCSPARAM WCSParam_Text1 23 536dxwf0200051031000000] Parameter {WCSParam_Text1} created by Correlation Studio 
web_reg_save_param("WCSParam_Text1", 
"LB="formnum="", 
"RB=\"", 
"Ord=8", 
"RelFrameId=1", 
"Search=Body", 
LAST); 
//後面的內容爲註釋部分,說明流水號536dxwf0200051031000000已經關聯並保存到WCSParam_Text1參數中。 
web_reg_save_param()爲LoadRunner的保存參數所用的函數,其做用是將返回流水號保存到WCSParam_Text1參數中,以便使用不一樣的號碼進行繳費歷史查詢出來的流水號能隨着時間的變化流水號也跟着變化,而不是錄製腳本時的 536dxwf0200051031000000,這樣能夠避免在重打發票時不會報諸如此流水號不存在等相似錯誤信息。然而如今的問題是怎麼將此流水號對應到重打發票對應的地方。另外一個問題是,不是全部的號碼繳費後查詢到的流水號數量都和錄製腳本時查詢到的流水號相同,事實上每作一筆除查詢類的操做都會有一個流水號。而咱們關注的是怎麼取到最新的繳費的流水號,下面詳細介紹相關步驟。 
5.1 修改web_reg_save_param()函數相關部分,很簡單,把"Ord="8"",改成"Ord=ALL",目的是找最TOP的那個參數值。 
5.2 光保存和取參數還不夠,咱們須要把參數能正確傳遞到重打發票對應的地方,爲此我採起的作法以下: 
在繳費歷史事件腳本最前面定義兩個變量,目的是爲了將流水號以字符串的形式保存在變量裏(由於LoadRunner不支持在web_submit_data()函數裏直接使用變量):具體作法是: 
char WCSParam_Text1Pram[50]; //保存取到的流水號 
char WCSParam_Text1PramVal[50]; //保存以"Value="流水號""取到的流水號。 

將關聯好的流水號存到變量裏,在此的作法是在對應的web_submit_data()函數後添加以下代碼段: 
lr_message("WCSParam_text1:%s",lr_eval_string("{WCSParam_Text1}")); 
//打印出關聯的參數WCSParam_Text1的值。 
sprintf(WCSParam_Text1Pram,"{WCSParam_Text1_%s}",lr_eval_string("{WCSParam_Text1_count}")); 
//把取到流水號保存到WCSParam_Text1Pram裏,具體形式爲 
sprintf(WCSParam_Text1PramVal,"Value="%s"",lr_eval_string(WCSParam_Text1Pram)); 
//組合流水號和」Value=」並保存到WCSParam_Text1PramVal變量中。 
lr_message("The value argument is : %s", WCSParam_Text1PramVal); 
//打印出字符串變量WCSParam_Text1PramVal的值。 

5.3 找到重打發票中響應的流水號,並把其中的"Value="536dxwf0200051031000000""替換成WCSParam_Text1PramVal,在這裏總共有兩處。 

到此爲止,流水號的關聯已經基本上處理完畢,下面咱們執行腳本,來驗證咱們想要的是否是真的有效。(注,參數化的問題在本文中不作具體介紹)爲了看到明顯的效果,咱們須要將日誌的處理作簡單設置。 
而後執行腳本,查看相關執行日誌,能夠獲得相似下面得消息。 


8.使用LoadRunner一些經常使用的注意事項



Note1:VuGen僅能錄製 Windows平臺上的會話,可是,錄製的Vuser腳本既能夠在Windows 平臺上運行,也能夠在 UNIX 平臺上運行。 
通用 Vuser 函數和特定於協議的函數,它們共同構成了 LoadRunner API,並使Vuser可以直接與服務器通訊。 
Note2:用於運行Vuser腳本的C解釋器僅支持ANSI C語言。它不支持 Microsoft對ANSI C的任何擴展。 
一般狀況下,能夠將登陸到服務器的活動錄製到vuser_init部分中、將客戶端活動錄製到Actions部分中,並將註銷過程錄製到vuser_end部分中。 
Note3:只能向Action部分(而不是init或end 部分)添加集合。 
Note:不要從事務內部發送消息,由於這可能使事務執行時間變長,並扭曲事務結果。 
Note4:若是使用日誌運行時設置修改腳本的調試級別,則 lr_message、lr_output_message 和 lr_log_message 函數的行爲將不會更改,它們將繼續發送消息。 
Note5:錄製 Java Vuser 腳本時, Vuser 腳本中將不生成 lr_think_time 語句。 
Note6:VuGen 新建參數,但不會自動替換任何在腳本中選定的字符串。 
Note7:不要將參數命名爲 unique,由於該名已被 VuGen 使用。 
Note8:若是在常規運行時設置文件夾中將「錯誤處理」設置爲「出現錯誤時仍繼續」,則錯誤消息仍將被髮送到輸出窗口。 
Note9:由於生成的服務器消息很長,並且日誌記錄會下降系統的運行速度,因此請僅爲腳本中特定的代碼塊激活服務器消息日誌記錄功能。 
Note10:啓用「出現錯誤時仍繼續」功能時,將覆蓋 0 嚴重級別;即便發生數據庫錯誤,也將繼續執行腳本。然而,若是禁用了「出現錯誤時仍繼續」功能,但將嚴重級別指定爲 1,則當發生數據庫錯誤時仍將繼續執行腳本。 
Note11:下列協議不是線程安全協議:Sybase-Ctlib、Sybase-Dblib、Informix、Tuxedo 和 PeopleSoft-Tuxedo。 
Note12:對於支持樹視圖的協議(如「視圖」菜單所示),在樹視圖中運行 Vuser腳本時, VuGen 將從 Vuser 腳本中的第一個圖標開始運行該腳本。 
Note13:要顯示運行時查看器,必須安裝 Microsoft Internet Explorer 4.0 或更高版本。 
Note:Vuser 生成「結果摘要」報告時,事務時間可能會增長。Vuser 能夠僅在從 VuGen 運行時才生成「結果摘要」報告。使用 Controller 運行 Web Vuser 腳本時, Vuser 不能生成報告。 
Note14:當使用 Javascrīpt 和 VBscrīpt Vuser 時,在腳本中用到的 COM 對象必須徹底的兼容。這使下列狀況成爲了可能:一個應用程序操縱另外一個應用程序中的對象,或者公開對象以便操縱它們。 


9.性能參數解析



WEB資源參數 

每秒點擊次數:中Vuser每秒向Web服務器提交的HTTP請求數,依據點擊次數來評估Vuser產生的負載量。 
吞吐量:案運行過程當中服務器上每秒的吞吐量。吞吐量的度量單位是字節,表示Vuser在任何給定的某一秒上從服務器得到的數據量,依據服務器吞吐量來評估Vuser產生的負載量。 
每秒HTTP響應數:中每秒從Web服務器返回的HTTP狀態代碼號(表示HTTP請求的狀態,例如「the request was successful」、「the page was not found」) 
每秒下載頁面數:每秒鐘從服務器下載的網頁數,依據下載的頁面數來評估Vuser產生的負載量。 
每秒重試次數:中每秒鐘內服務器嘗試的鏈接次數,在下列狀況下將重試服務器鏈接:初始鏈接未經受權、要求代理服務器身份驗證、服務器關閉了初始鏈接、初始鏈接沒法鏈接到服務器或者服務器最初沒法解析負載生成者的IP地址。 
鏈接數:每一個時間點上打開的TCP/IP鏈接數。 
每秒SSL鏈接數:每秒打開的新的以及從新使用的SSL鏈接數。當對安全服務器打開TCP/IP鏈接後,瀏覽器將打開SSL鏈接,由於新建SSL鏈接須要消耗大量的資源,因此應該儘可能少地打開新的SSL鏈接。

網頁細分圖 
注意:因爲要從客戶端測定服務器時間,所以,若是發送初始HTTP請求到發送第一次緩衝這一段時間內網絡性能發生變化,則網絡時間可能會影響此測定。所以,所顯示的服務器時間是一個估計值,可能不太精確。 
DNS解析:顯示使用最近的DNS服務器將DNS名稱解析爲IP地址所需的時間。「DNS 查找」度量是指示DNS解析問題或DNS服務器問題的一個很好的指示器。 
鏈接:顯示與包含指定URL的Web服務器創建初始鏈接所需的時間。鏈接度量是一個很好的網絡問題指示器。此外,它還可代表服務器是否對請求做出響應。 
第一次緩衝:顯示從初始HTTP請求(一般爲 GET)到成功收回來自Web服務器的第一次緩衝時爲止所通過的時間。第一次緩衝度量是很好的Web服務器延遲和網絡滯後指示器。注意:因爲緩衝區大小最大爲 8K,所以第一次緩衝時間可能也就是完成元素下載所需的時間。 
SSL握手:顯示創建SSL鏈接(包括客戶端 hello、服務器hello、客戶端公用密鑰傳輸、服務器證書傳輸和其餘部分可選階段)所用的時間,自此點以後,客戶端與服務器之間的全部通訊都將被加密。SSL握手度量僅適用於HTTPS通訊。 
接收:顯示從服務器收到最後一個字節並完成下載以前通過的時間。「接收」度量是很好的網絡質量指示器(查看用來計算接收速率的時間/ 大小比率)。 
FTP驗證:顯示驗證客戶端所用的時間。若是使用FTP,則服務器在開始處理客戶端命令以前,必須驗證該客戶端。「FTP 驗證」度量僅適用於 FTP 協議通訊。 
客戶端時間:顯示因瀏覽器思考時間或其餘與客戶端有關的延遲而使客戶機上的請求發生延遲時,所通過的平均時間。 
錯誤時間:顯示從發出HTTP請求到返回錯誤消息(僅限於HTTP錯誤)這期間通過的平均時間。

系統資源(UNIX資源參數) 
CPU utilization :CPU的使用時間百分比 
Disk rate :磁盤傳輸速率 
Paging rate :每秒鐘讀入物理內存或寫入頁面文件中的頁數 
Page-in rate :每秒鐘讀入到物理內存中的頁數 
Page-out rate :每秒鐘寫入頁面文件和從物理內存中刪除的頁數 
Collision rate :每秒鐘在以太網上檢測到的衝突數 
Context switches rate :每秒鐘在進程或線程之間的切換次數 
Average load :上一分鐘同時處於「就緒」狀態的平均進程數 
Swap-in rate :正在交換的進程數 
System mode CPU utilization :在系統模式下使用CPU的時間百分比 
User mode CPU utilization :在用戶模式下使用CPU的時間百分比

網絡監視參數 

網絡延遲時間:源計算機與目標計算機(例如,數據庫服務器和Vuser負載生成器)之間的整個路徑的延遲。 
網絡子路徑時間:從源計算機到路徑上每一個節點的延遲。注意:從源計算機到每一個節點的延遲是同時而又獨立地度量的。所以,從源計算機到其中一個節點的延遲可能大於源計算機與目標計算機之間的整個路徑上的延遲。 
網絡段延:路徑上每一個段的延遲。 
驗證網絡是不是瓶頸:能夠合併各類圖來肯定網絡是不是瓶頸。例如,經過使用網絡延遲時間圖和運行Vuser圖,能夠肯定Vuser的數量如何影響網絡延遲。網絡延遲時間圖指示在方案運行期間的網絡延遲。

數據庫服務器 

User Calls :在每次登陸、解析或執行時, Oracle 會分配資源(Call State 對象)以記錄相關的用戶調用數據結構。在肯定活動時,用戶調用與RPI調用的比指明瞭,因用戶發往Oracle的請求類型而生成的內部工做量 
Total file opens :由實例執行的文件打開總數。每一個進程須要許多文件(控制文件、日誌文件、數據庫文件)以便針對數據庫進行工做 
Opened cursors current :當前打開的光標總數 
DB block changes :因爲與一致更改的關係很是密切,此統計計算對SGA中全部塊執行的、做爲更新或刪除操做一部分的更改總數。這些更改將生成重作日誌項,若是事務被提交,將是對數據庫的永久性更改。此統計是一個所有數據庫做業的粗略指示,而且指出(可能在每事務級上)弄髒緩衝區的速率。 
10.AIX操做系統機器性能瓶頸定義 

瓶頸定義 
CPU bound : vmstat : when %user+%sys greater than 80%; 
Disk I/O bound : vmstat : when %iowait greater than 40%(AIX4.3.3 or later); 
Application disk bound :vmstat : when %tm_act greater than 70%; 
Paging space low : lsps -a : when used paging space greater than 70% active; 
Paging bound : iostat vmstat : paging logical volumes %tm_act greater than 30% of the I/O(iostat) and paging activity greater than 10* the number of CPUs(vmstat); 
Thrashing : vmstat sar :rising page outs, CPU wait and run queue; 


11.系統性能分析命令



cpu : vmstat,iostat,topas,nmon,ps,sar,time,timex,netpmon,trace,trcrpt; 
內存:vmstat,topas,nmon,ps,svmon,lsps,filemon,trace,trcrpt; 
磁盤:iostat,topas,nmon,lvmstat,iostat -d, lvmstat, lsps,filemon,lsattr,lsdev; 
網絡:netstat,topas,nmon,entstat,nfsstat,ifconfig,iptrace,ipreport,trace,trcrpt; 
監視CPU使用狀況:vmstat 2 ; iostat -t 2 6;sar -P ALL 2 3; 
監視內存使用狀況: vmstat 2 10;ps aux;svmon -G;svmon -Pau 10; 
監視I/O使用狀況: iostat 5;sar -d 3 3; 
監視網絡使用狀況: netstat -i ;netstat -m;netstat -v;
相關文章
相關標籤/搜索