LoadRunner out of memory exception for virtual user with a large web_req_save_param value

This applies to LR 11.x and LR 9.x using the web (http/html) protocol.

Sometimes it’s necessary in loadrunner to capture a large amount data with a web_reg_save_param function.  Let’s say we want to capture an entire page response into a param for data extraction.

First off we need to set web_set_max_html_param_len(“X00000″); to be able to capture the entire page size in the script vuser_init. If your setting is too small your web_reg_save_param function will throw an error.

Normally that’s all you need to do to get the script working in vugen. However when you kick off a test you may run into issues. Here are some of the errors you may encounter:

Error -26000: Error: Out of memory !
Error — memory violation : Exception ACCESS_VIOLATION received.

I have found that when you run a large number of these virtual users under a single LR process you can run into memory issues and either the load generator or loadrunner process will terminate unexpectedly.

If you open up Run-time Settings for your script in HP Virtual User Generator -> General -> Miscellaneous so will see that the default setting for Multithreading is set to ‘Run Vuser as a process’.

Most of the time changing this setting to ‘Run Vuser as a thread’ will resolve your issues assuming your load generators have enough free memory to run your XX virtual users each under their own mdrv.exe process. Basically if you run 500 users on a single LG you will see 500 instances of this process present.

If your system doesn’t have enough memory for the above setting something else to try is reducing the number of threads that run under a single mdrv.exe process.

Open C:Program FilesHPLoadRunnerconfigwlrun7.ini

Modify the key AgentMaxThreadsPerDriver=50 to 25 or lower.

This will force loadrunner to spawn more instances of mdrv.exe since each process can only the number of VUs specified by the above key.

Advertisements

ERROR WHILE RUNNING BLANK QUERY ON AN APPLET

Error while running blank query on an applet !!

Today while working on one of the issue in PRE_PROD env, when I navigated to Customer screen to see list of all customers, ran a blank query, I got the following error :There were more rows than could be returned. Please refine your query to bring back fewer rows(SBL-DAT-00500).In the very first sight, it seems query is bringing a large number of records which Siebel can’t handle. hmmm… okayy, lets try running a query which will bring less records so I put a query on “Type” field on the applet and ran the query and it worked fine. That means there is some limitation in Siebel while fetching the records and if the number of records goes beyond that limit it gives up. So, one might ask what is that upper limit??

Upper limit for number of records that Siebel can pull from a single query is equal to the value set for “MaxCursorSize” parameter available in your siebel.cfg file. Here below can be the values :

a) 0 : If this parameter set to 0 (zero), that means Siebel can fetch 10,000 records in a single query. This is the recommended value.
b) -1 : it indicates infinite number of records, results in low performance and not recommended by Siebel.
c) >0 : any number greater than 0 will fetch that many records in one query.

So, what happens is if you run a query on UI and you try to scroll the records and crosses the limit what has been set by “MaxCursorSize” parameter, you will get the above mentioned error. Moreover, the parameter is applied for each and every query that Siebel runs with the exception that it might override by “Maximum Cursor Override” property at the business component level.

I checked for the value of “MaxCursorSize” parameter in CFG and it was set to 0. Just to cross verify I also ran a query in the database and confirmed that number of records in S_ORG_EXT records were more than 10,000 records. But, wait a minute, I didn’t even scroll once on the My Account Screen and I just tried to navigate on the default view of the screen and still I received this error.

One more thing to notice here is that I realized that even I have more than 10,000 Billing Account records in the application, but there is no issue when I navigate to All Billing Accounts view. That means something special does exist with Account business component which is causing this issue. And here below is the reason for it :

Hierarchy Parent Field” property of business component was set to “Parent Account Id” and due to this while running a blank query on the Accounts UI, resulted in putting a “/*+ ALL_ROWS */” hint in the SQL that Siebel runs in the background. This is the difference I observed when I just removed the “Hierachy Parent Field” and compiled the SRF again and blank query worked fine this time. No issues. But this doesn’t mean that this is the solution for the issue, you can’t just remove this property to avoid this error because it get reflect in all the applet based on this business component. So here is the solution for this :

Use “Disable Buscomp Hierarchy“, a user property available on the applet and set its value to True. Since it is applet based user property, only applies to the applet on which it is used.

Disable Buscomp Hierarchy = True

What it does is : it will just ignore the effect of “Hierarchy Parent Field” on the business component and run the query without “/*+ ALL_ROWS */”hint in the background to bring the records as per the normal process.

I put this user property on the My Account List Applet and ran a blank query again, everything worked fine.

How To Use VI on Unix

Sık Kullanılan vi Komutları

Yazma (Insert):

i Yazılanlar, imlecin o an bulunduğu yerden itibaren girilir.
I Yazılanlar, imlecin bulunduğu satırın başına girilir.
a Yazılanlar, imlecin o an bulunduğu yerden sonraya girilir
A Yazılanlar, imlecin bulunduğı satırın sonuna girilir.
o İmlecin bulunduğu satırdan sorasına yeni bir satır açılır ve yazma moduna geçilir.
O İmlecin bulunduğu satırdan öncesine yeni bir satır açılır ve yazma moduna geçilir.
r Bir karakter değiştir.
R Birden fazla karakter değiştir. ESC tuşuna basana kadar replace durumunda kalınır.
cw İmlecin bulunduğu yerden kelime sonuna kadar siler ve yazı moduna girer. (change word)
C İmlecin bulunduğu yerden satır sonuna kadar siler ve yazı moduna girer. (change word)
cc İmlecin bulunduğu satırı tümden siler ve yazı moduna girer. (change word)

Silme (Deleting):

x İmlecin o an bulunduğu yerin sağındaki ilk karakteri siler.
X İmlecin o an bulunduğu yerin solundaki ilk karakteri siler.
3x İmlecin o an bulunduğu yerin sağındaki 3 karakteri siler.
3X İmlecin o an bulunduğu yerin solundaki 3 karakteri siler.
dw İmlecin bulunduğu yerden kelime sonuna kadar siler. (delete word)
D İmlecin bulunduğu yerden satır sonuna kadar siler.
dd İmlecin bulunduğu satırı siler.
3dd İmlecin bulunduğu satır dahil aşağı doğru 3 satırı siler.
:d İmlecin bulunduğu satırı siler.

Dosyadan Çıkma (Quiting):

: x Değişiklikleri kaydeder ve dosyadan çıkar.
:q Değişiklikleri kaydetmeden dosyadan çıkar.
wq Değişiklikleri kaydeder ve dosyadan çıkar.
ZZ Değişiklikleri kaydeder ve dosyadan çıkar.
:q! Değişiklikleri görmezden gelir (force) ve dosyadan çıkar.

Hareket (Motion):

Normal olarak imleci yönlendirmek için ok tuşlarından yararlanılabilir. Dosya içerisinde süratli hareket için komutlar aşağıdaki şekildedir.

w Sonraki kelimenin başına gider.
e Sonraki kelimenin sonuna gider.
b Bir önceki kelimenin başına gider.
0 Satırın başına gider.
$ Satırın sonuna gider.
1G Dosyanın ilk satırına gider.
10G Dosyanın onuncu satırına gider.
G Dosyanın en son satırına gider.

Kopyala & Yapıştır:

yy İmlecin bulunduğu satırı kopyalar.
3yy İmlecin bulunduğı satır da dahil olmak üzere aşağı doğru 3 satırı kopyalar.
p Hafızadaki veriyi imlecin bulunduğu satırın altına yapıştırır.
P Hafızadaki veriyi imlecin bulunduğu satırın üstüne yapıştırır.

Geri Alma (Undo):

u Son yapılan değişiklik geri alınır.
U Satırda yapılan tüm değişiklikler geri alınır.

Arama (Search):

/string String tüm dosya içinde aranır
n Önceki aramayı aşağı doğru tekrar eder. (Find Next)
N Önceki aramayı yukarıya doğru tekrar eder. (Find Previous)

Bul & Değiştir (Search & Replace):

:%s/Ara/Degistir/flag Ara ve değiştir. (Flag bilgileri aşağıdaki gibidir.)
g Flag – Bulunan herşeyi değiştir.
c Flag – Degistirmeden önce onay al.

How to get an existing Rule Set(s) on Siebel by querying a Validation Message in DB

As you all know the biggest problem in Siebel is of course performance. To handle this issue, (maybe as first) do not coding so much on Siebel tools. One of great example is “Rule Set” and also “Validation Messages“. With this properties, you can do everything that you can do with “Server Script” & “Browser Script” of “Business Components” & “Applets“. Anyway if we focus on the subject, what we can do is finding the message with quriying the message on DB. As an example we can get “Black list”. Here is the code:

SELECT e.obj_type_cd AS object_type, e.obj_name AS object_name,

e.evt_name AS event, e.evt_sub_name AS sub_event,

e.actn_cond_expr AS conditional_expr, s.NAME AS action_set,

a.NAME AS action, rs.NAME AS rule_set, r.NAME AS RULE, l.msg_text

FROM S_CT_ACTION_SET s,

S_CT_ACTION a,

S_VALDN_RL_SET rs,

S_VALDN_RULE r,

S_ISS_VALDN_MSG m,

S_ISS_VMSG_LANG l,

S_CT_EVENT e

WHERE a.ct_actn_set_id = s.row_id

AND a.svc_context LIKE

‘”Rule Set Name”, “‘ || rs.NAME || ‘”, “Enable Log”, “Y”‘

AND rs.status_cd = ‘Active’

AND r.rule_set_id = rs.row_id

AND r.valdn_msg_id = m.row_id

AND l.par_row_id = m.row_id

AND e.ct_actn_set_id = s.row_id

AND l.lang_id = ‘ENU’

AND l.msg_text LIKE ‘%Black%List%’;