ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » BIP2121E and BIP2106E

Post new topic  Reply to topic
 BIP2121E and BIP2106E « View previous topic :: View next topic » 
Author Message
kirani
PostPosted: Mon Feb 04, 2002 5:23 pm    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

Hi,

I am getting these errors during runtime on WIN2K broker (MQSI V2.0.2, CSD1). In my message flow I am retrieving 1010 records from db (MS-SQL Server 2000) and storing it in a XML tree. Record size is around 200 bytes. Then, I am looping in my message flow to extract one record at a time from the Input XML tree and then send it to the output queue (for now).
After I process 146 messages, I get BIP2121E and BIP2106E (see description below) and my original message goes to DLQ. I am not using any plug-in in my message flow.

We have around 2GB RAM on our server and paging size is set to 2GB or more. My data size in tree is not so big (200 bytes * 1000 records = 200,000 bytes = 195.31 KB). I don't know what is going wrong here. I verified the data for 146th record, and there is nothing wrong with it.

Does anyone know what is going wrong here? Am I missing something?

Here is the detailed error message,
*******
2002-02-04 09:23:100000000 888 Error BIP2121E: The thread bootstrap code caught an unhandled exception on thread '888'.
An internal software error has occurred in the message broker. Further messages will indicate the effect of this error on the broker's transactions. The exception was issued on thread '888'. Futher information may be in the exception information associated with this message.
Restart the message broker. If the problem continues to occur, then restart the system. If the problem continues to occur, then contact your IBM support center.
2002-02-04 09:23:100000000 888 FatalException BIP2106E: Unable to allocate memory during operation performed by object 'FU_Transform.LeaseTransform.RemProcessed'.
An execution group performed an operation which needed to allocate memory, but the request failed because insufficient memory was available. The execution group process will be stopped and an attempt made to restart it.
Since this is indicative of a shortage of memory, it may be necessary (after performing initial problem determination) to either increase the amount of memory available or reduce the system's requirement for memory. The former might involve increasing the available RAM or increasing the amount paging space. The latter might involve stopping applications which are not required or which have high memory requirements and reducing the amount of broker processes running on the system.
*******

Thanks in advance!

Regards,
Kiran
Back to top
View user's profile Send private message Visit poster's website
mpuetz
PostPosted: Tue Feb 05, 2002 9:20 am    Post subject: Reply with quote

Centurion

Joined: 05 Jul 2001
Posts: 149
Location: IBM/Central WebSphere Services

Hi Kiran,

it really depends on how you do it whether your 2 megs of RAM
are sufficient to do that.
Are you performing a loop in a single compute node or are you
doing it in an *external* loop copying the message tree every
time you do a select ?


_________________
Mathias Puetz

IBM/Central WebSphere Services
MQ/WMQI Specialist

[ This Message was edited by: mpuetz on 2002-02-05 09:21 ]
Back to top
View user's profile Send private message
kirani
PostPosted: Tue Feb 05, 2002 10:27 am    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

Hi Mathias,

I have 2GM RAM. I am doing these operations in *external* loop.

My Message flow looks like this,

MQInput->Compute1->Filter1 (true terminal)->FlowOrder1(First terminal)->Compute2->MQOutput
->FlowOrder1(Second terminal)->Compute3->Filter1 (input terminal).

ESQL in these nodes is as follows,

Compute1 : Reads records from database table and stores them in a tree. (pass Message & Destination in Advanced Tab)
--------
-- Retrieve records from tbl_data
SET OutputRoot.XML.FU.RecordSet[] = (
SELECT
tbl.f1, tbl.f2, tbl.f3, tbl.f4, ... tbl.fn
from Database.tbl_data as tbl
where
tbl.f1 = InputRoot.XML.FU.TransmitDate AND
tbl.f2 = InputRoot.XML.FU.SrcLocation AND
tbl.f3 = 'P'
);

-- Set count variable
SET OutputDestinationList.RecCount = CARDINALITY(OutputRoot.XML.FU.RecordSet[]);


Filter1 - Checks for more records to process in RecordSet[]
-------
DestinationList.RecCount > 0

Compute2 - Extract first record in the RecordSet[] and send it to output queue. (Copy Data header only)
--------

SET OutputRoot.XML.FU.Data = InputRoot.XML.FU.RecordSet[1];
--SET OutputRoot.XML.FU.RecordSet = NULL;


Compute3 - Copy complete message (pass Message and Destination in Advanced Tab)
--------
-- Remove processed record from the tree
SET OutputRoot.XML.FU.RecordSet[1] = NULL;
-- Decrement count by 1
SET OutputDestinationList.RecCount = InputDestinationList.RecCount - 1;


I am very sure one of these nodes is not releasing the memory.

Thanks,
Kiran
Back to top
View user's profile Send private message Visit poster's website
kirani
PostPosted: Wed Feb 06, 2002 8:57 am    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

For one unit of work (UOW), Broker keeps all copies of the parsed tree in the memory. After the UOW is over, these trees are deleted from the memory. This is the reason I am running out of memory. I have 100's of parsed tree in the memory for one UOW and each tree size is in MegaBytes.

In Summary, if you are trying to build multiple output messages from single input message using some kind of "external" loop, eventually you are going to have memory problem. This will happen if the parsed tree is very large and the number of output messages are high.

You have to be very careful while designing these kind of Message flows.

Regards,
Kiran
Back to top
View user's profile Send private message Visit poster's website
mpuetz
PostPosted: Thu Feb 07, 2002 10:03 am    Post subject: Reply with quote

Centurion

Joined: 05 Jul 2001
Posts: 149
Location: IBM/Central WebSphere Services

Hi,

one more info on this.
Typically when using external loops with a
large repeat count one runs into a stack problem
first, since essentially you are creating a recursive
loop in terms of the underlying MQSI programming.
I.e. when MQSI propagates a message from a output
terminal it *calls* the evaluate function of the
following node. This call returns only when the
following flow-branch ends. Hence the stack of the calling
node is not cleaned up before the subflow which it propagates
to is completed. Thats also why all copies you generate
on the fly won't be cleaned up before that particular branch
has ended.
With 2.0.2 CSD 02 on UNIX you can increase stack size from
its 1MB default value by setting an environment variable
to mitigate this.
With MQSI 2.0.x on Win NT/2K you can use the editbin command
(shipped e.g. with MS Visual C++) to increase the stack
of the dataflowengine.exe

The maximum *heap* memory you can use within a dataflowengine
is platform dependent. On NT and HP-UX you can use up to the
physical amount of memory (+ virtual mem) automatically. On AIX
only upto 512MB. You need a patched dataflowengine from IBM
if you need more.


_________________
Mathias Puetz

IBM/Central WebSphere Services
WebSphere Business Integration Specialist
Back to top
View user's profile Send private message
mpuetz
PostPosted: Thu Feb 07, 2002 10:10 am    Post subject: Reply with quote

Centurion

Joined: 05 Jul 2001
Posts: 149
Location: IBM/Central WebSphere Services

One more trick to saving memory in external loops:

1.) keep the number of node within the loop small.
2.) *externalize* the loop body, if possible.

both are possible if the iteration n does not depend
on the result of n-1. then you can use a flow order node to solve this.

filter(i < maxrec) --(yes)--> floworder --(first)--> do your thing for i ---> output or whatever

floworder --(second)-->compute(i=i+1)------>filter(i>maxrec)--(no)-->end processing

In the i=i+1 node only modify the destinationlist and leave the message unchanged.
Now your the temporary message buffers you need for each transformation
are freed in each loop iteration.

Hope this helps.

_________________
Mathias Puetz

IBM/Central WebSphere Services
MQ/WMQI Specialist

[ This Message was edited by: mpuetz on 2002-02-07 10:12 ]

[ This Message was edited by: mpuetz on 2002-02-07 10:15 ]
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » BIP2121E and BIP2106E
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.