[rules-users] Out of memory problem

Eymeric VIEUILLE evieuille at gfi.fr
Wed Aug 29 03:51:25 EDT 2007


Hi !

I am currently leading a study that compares BRMS. The aim of this study 
is to determine if a rules engine can be used for our application and 
what rules engine to use.

I made a prototype and I encountered a big problem of memory : no more 
than 53 objects could be passed as facts. After this threshold, I 
encountered a java.lang.OutOfMemoryException :
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

I increased the memory allocated to the JVM, but the more I insert 
objects as Facts and the more Drools becomes slower !

I think that the problem is exactly the same as the following one :
http://lists.jboss.org/pipermail/rules-users/2007-August/002592.html

Can you confirm to me that is the same problem ? And in a positive 
affirmation, how to solve this problem ? And how much time would it take ?

I am using drools 4.0 (developing whith associated eclipse IDE).

I realized a dslr that looks like this :
package com.sample

import XXX.Message;
import XXX.MyObject;

expander leg_recognizer.dsl

rule "rule 1"
    no-loop true
    when
        $m1 is an "OUT" marker
        $m2 is an "OFF" marker
        $m3 is an "ON" marker
        $m4 is an "IN" marker
        $m4 event date is more than $m1 event date
    then
        print "Rule 1"
        display message $m1
        display message $m2
        display message $m3
        display message $m4
        make $m1 treated
        make $m2 treated
        make $m3 treated
        make $m4 treated
        create a object "1" with state "active";
end

rule "rule 2".............(same principle) --> 6 rules in the real file.

And it uses the following dsl file :
[condition][]{message} is an "{state}" marker={message} : Message(type 
== "{state}")
[consequence][]print "{string}"=System.out.println("{string}");
[consequence][]display message {object}=System.out.println("Message : " 
+ {object});
[consequence][]create a object "{id}" with state "{state}"=insert(new 
MyObject("{id}", "{state}"));
[consequence][]make {message} treated=retract({message});
[condition][]{message1} event date is more than {message2} event 
date=eval({message1}.isALaterEventThanMessage({message2}))

Did I made a mistake in the use of Drools or is this a bug ?

Thanks for answers...That's quite urgent !





More information about the rules-users mailing list