文檔首頁>>LoadRunner 系列教程>>LoadRunner常見錯(cuò)誤收集及解決方案
LoadRunner常見錯(cuò)誤收集及解決方案
一. This Vuser already started a transaction with the same name, and has not yet processed the corresponding lr_end_transaction statement.
在做性能測(cè)試的時(shí)候,有時(shí)候會(huì)遇到下面的錯(cuò)誤:This Vuser already started a transaction with the same name, and has not yet processed the corresponding lr_end_transaction statement.
解釋:就是腳本中有一個(gè)事物開始了,但是沒有結(jié)束事物,此時(shí)loadrunner就會(huì)報(bào)錯(cuò),因?yàn)殚_始和結(jié)束是一一對(duì)應(yīng)的,誰也不能把它們拆開,拆開了就會(huì)報(bào)錯(cuò)。
異常再現(xiàn):
下列代碼中,如果業(yè)務(wù)方法報(bào)了異常(Throw Exception),那么下面的if判斷的代碼不會(huì)被執(zhí)行,而直接跳到catch子句里,那么已經(jīng)開始的業(yè)務(wù)"searchItemList_man"就沒有被結(jié)束,當(dāng)你再次開始業(yè)務(wù)時(shí),就會(huì)報(bào)錯(cuò)~
1 public int action() throws Throwable {
2
3 misc = generateManItemSearchCondition();
4 lr.start_transaction("searchItemList_man");
5 try {
6 //業(yè)務(wù)方法
7 items = searchService.searchItemList(misc);
8 if (items.isSuccess()) {
9 lr.end_transaction("searchItemList_man",lr.PASS);
10
11 } else {
12 lr.end_transaction("searchItemList_man",lr.FAIL);
13 }
14 orderMap.clear();
15 productIdSet.clear();
16 productStatusList.clear();
17 } catch (Exception e) {
18
19
20 e.printStackTrace();
21 }
22
23
24 misc = null;
25 items = null;
26 return 0;
27 }//end of action
|
解決辦法: 在catch字句里加上一個(gè) 事務(wù)結(jié)束代碼,修改后的catch段代碼如下:
catch (Exception e) {
// TODO Auto-generated catch block
lr.end_transaction("searchItemList_man",lr.FAIL);
e.printStackTrace();
}
|
二.Function two_way_comm_post_message / two_way_comm_post_message_ex failed錯(cuò)誤
在Controller里運(yùn)行腳本,運(yùn)行一段時(shí)間以后出現(xiàn)如下error messages。
1. Code - 60990 Error: Two Way Communication Error: Function two_way_comm_post_message / two_way_comm_post_message_ex failed.
2. Code - 29739 Error: Service client with id=1 failed to post a message, reason - communication error.
3. Code - 16895 Error: Failed to post xdr buffers data array by post_ex.
4. Code - 10343 Error: Communication error: Cannot send the message since reached the shared memory buffer max size.
問題誘因1:
共享內(nèi)存緩存溢出,造成Controller和Load Generator之間通訊出現(xiàn)問題。
解決方案:
修改兩個(gè)配置文件。
1. $installation folder$\dat\channel_configure.dat
2. $installation folder$\launch_service\dat\channel_configure.dat
在這兩個(gè)文件中的[general]部分下添加如下配置。
shared_memory_max_size=100 (修改共享內(nèi)存為100MB,默認(rèn)是50MB)
重新啟動(dòng)Controller,問題解決。
問題誘因2
打開 controller中的 diagnostics菜單,點(diǎn)掉復(fù)選框.. 步驟如下圖
1.
2. 點(diǎn)掉 Enable the following diagnostics
3. 整理了一下 這個(gè)功能是干么滴:
當(dāng)場(chǎng)景中打開 Diagnostics 菜單下 Web Page Diagnostics 功能后, 才能得到網(wǎng)頁分析組圖。
通過該圖, 可以對(duì)事務(wù)的組成進(jìn)行抽絲剝繭的分析, 得到組成這個(gè)頁面的每一個(gè)請(qǐng)求的時(shí)間分析, 進(jìn) 一步了解響應(yīng)時(shí)間中有關(guān)網(wǎng)絡(luò)和服務(wù)器處理時(shí)間的分配關(guān)系。
可以實(shí)現(xiàn)對(duì)網(wǎng)站的前端性能分析, 明確系統(tǒng)響應(yīng)時(shí)間較長是由服務(wù)器端處理能力不足還是客戶端鏈接 到服務(wù)器的網(wǎng)絡(luò)消耗導(dǎo)致的。
三. Fatal Error -26000: Not enough memory (12320 bytes) for "new buffer in LrwSrvNetTaskIt 問題解決及l(fā)r腳本心得
現(xiàn)象: 用loadrunner跑場(chǎng)景的時(shí)候報(bào)錯(cuò):
Action.c(28): Fatal Error -26000: Not enough memory (12320 bytes) for "new buffer in LrwSrvNetTaskItem::AllocSrvNetBuf". Aborting 的錯(cuò)誤,
同時(shí)任務(wù)管理器里mmdrv.exe 內(nèi)存占用一直增大,最終mmdrv.exe崩潰. 網(wǎng)上有人認(rèn)為是 lr的 emulation browser設(shè)置問題,最后發(fā)現(xiàn)系腳本問題,原腳本聲明了好幾個(gè)變量,而且都未使用:
1 Action()
2 {
3
4 //返回的字符串
5 char resp_txt[200] = {0};
6 //寫入流的數(shù)據(jù)
7 long myfile;
8 //當(dāng)前日期時(shí)間
9 long now;
10 .....
11 ......
12
13 return 0;
14 }
|
解決方法及總結(jié):
后將此三個(gè)變量注釋之后問題解決.
結(jié)論:LR的腳本要注意內(nèi)存的使用,盡量減少變量聲明,對(duì)于char類型的變量要及時(shí)用free:即:
1 char * a;
2 free (a);